我使用this solution将MenuItem绑定到枚举。
Enum值正确显示,但我似乎无法为MenuItem的子项设置默认选中的值。
或者说,我希望MenuItem默认选中其中一个子项(我正在使用的枚举值)。
我尝试了以下代码,使用了Style和触发的Setter:
<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之类的值,我在Trigger Value属性中尝试AnEnum.First
或0
(作为answered here),但无济于事。
DataTrigger
是否可取?如果是这样,我怎么能在XAML中写出来?
或者我应该在DataTemplate
的{{1}}内使用ItemTemplate
吗?
我也尝试使用MenuItem
相关方法摆弄代码隐藏,但大多数属性(如Current)都是只读的。
我知道你可以在代码隐藏中编写SomeSetting.Items
,但我又不知道如何以编程方式在MenuItem中选择一个Item。
我也试过这段代码,但效果不好:
SomeSettingMenu.ItemsSource = Enum.GetValues(typeof(....))
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Header}" Value="enums:DisplayType.ItemA">
<Setter Property="IsChecked" Value="True" />
</DataTrigger>
</Style.Triggers>
是我正在使用的不同程序集的命名空间。
任何想法都将不胜感激,提前谢谢你!
答案 0 :(得分:2)
你可以这样做。这将绑定到子MenuItem的DataContext,它是第一个项目的“ItemA”。
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="MenuItem.IsCheckable" Value="True"/>
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="ItemA">
<Setter Property="MenuItem.IsChecked" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</MenuItem.ItemContainerStyle>
答案 1 :(得分:2)
考虑更改
<Trigger Property="MenuItem.Header" Value="enums:AnEnum.ItemA" >
到
<Trigger Property="MenuItem.Header" Value="{x:Static enums:AnEnum.ItemA}" >
在您的示例中,您检查标题是否等于 sting“枚举:AnEnum.ItemA”不要枚举AnEnum成员ItemA。