Я связал MenuItem с Enum, используя это решение .
Enum Values отображаются правильно, но я не могу установить проверенное значение по умолчанию для дочерних элементов MenuItem.
В качестве альтернативы, я бы хотел, чтобы у MenuItem был установлен один из его дочерних элементов (значения перечисления, которое я использую) по умолчанию.
Я пробовал следующий код, используя стиль и сработавший сеттер:
<ContextMenu>
<MenuItem Header="Some Setting" Name="SomeSettingMenu" DataContext="{Binding}"
ItemsSource="{Binding Source={StaticResource DisplayTypeValues}}"
Click="SomeSettingClicked">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="MenuItem.IsCheckable" Value="True"/>
<Style.Triggers>
<Trigger Property="MenuItem.Header" Value="enums:AnEnum.ItemA" >
<Setter Property="MenuItem.IsChecked" Value="True"/>
</Trigger>
</Style.Triggers>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
</ContextMenu>
Перечисление содержит значения, такие как ItemA, я также пытался AnEnum.First
или 0
в атрибуте значения триггера (как ответил здесь ), но безрезультатно.
Желательно ли было бы DataTrigger
? Если так, как я могу написать это в XAML?
Или я должен использовать DataTemplate
в ItemTemplate
для MenuItem
?
Я также пытался поиграться с выделенным кодом с помощью SomeSetting.Items
связанных методов, однако большинство свойств (таких как Current) доступны только для чтения.
Я знаю, что вы можете написать SomeSettingMenu.ItemsSource = Enum.GetValues(typeof(....))
в коде позади, но опять же я не знаю, как программно выбрать элемент в MenuItem.
Я также пробовал этот код, он тоже не работает:
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Header}" Value="enums:DisplayType.ItemA">
<Setter Property="IsChecked" Value="True" />
</DataTrigger>
</Style.Triggers>
enums
- это пространство имен из другой сборки, которую я использую.
Любые мысли приветствуются, заранее спасибо!