У меня есть окно WPF с представлением OxyPlot. Я пытаюсь добавить функциональность скрыть/показать каждую серию, основываясь на динамически сгенерированном, проверяемом контекстном меню сюжета. Идея состоит в том, чтобы иметь объект ObservableCollection<T>
, связанный с ItemsSource
контекстного меню, где T - класс, который содержит в основном заголовок сериала в виде строки, а статус проверки по умолчанию - boolean.
Выдержка из 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>
Контекстное меню отображается правильно, но флажки находятся не в том месте, и у него странное поведение при наведении мыши:
Ожидаемый результат:
Фактический результат:
Что мне не хватает?
ТИА
Вместо этого используйте 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>