WPF и OxyPlot: контекстное меню с возможностью проверки, динамически генерируемое

У меня есть окно WPF с представлением OxyPlot. Я пытаюсь добавить функцию скрытия/отображения для каждой серии на основе динамически генерируемого, проверяемого контекстного меню сюжета. Идея состоит в том, чтобы иметь объект ObservableCollection<T>, привязанный к ItemsSource контекстного меню, где T — это класс, который содержит в основном заголовок серии в виде строки и статус проверки по умолчанию в виде логического значения.

Выдержка из View.xaml:

<oxy:PlotView
    x:Name="oxyPlot"
    Model="{Binding PlansPlotModel}"
    Controller="{Binding PlansPlotController}">

    <oxy:PlotView.ContextMenu>
        <ContextMenu ItemsSource="{Binding PlansPlotContextMenuItems}">
            <ContextMenu.ItemTemplate>
                <DataTemplate>
                    <MenuItem Header="{Binding Title}"
                              IsCheckable="True"
                              IsChecked="{Binding IsCheckedByDefault}" />
                </DataTemplate> 
            </ContextMenu.ItemTemplate>
        </ContextMenu>
    </oxy:PlotView.ContextMenu>
</oxy:PlotView>

Контекстное меню отображается корректно, но галочки стоят не на том месте, и при наведении мышки ведет себя странно:

Ожидаемый результат:

Ожидаемый результат

Фактический результат:

Фактический результат

Что мне не хватает?

ТИА


person silentman.it    schedule 02.04.2015    source источник


Ответы (1)


Вместо этого используйте ItemContainerStyle:

<ContextMenu.ItemContainerStyle>
    <Style TargetType="{x:Type MenuItem}">
        <Setter Property="IsChecked" Value="{Binding IsCheckedByDefault}"/>
        <Setter Property="IsCheckable" Value="true"/>
        <Setter Property="Header" Value="{Binding Title}"/>
    </Style>
</ContextMenu.ItemContainerStyle>
person MaX    schedule 14.08.2015