【发布时间】:2010-11-29 15:54:39
【问题描述】:
我已使用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 中编写它?
或者我应该在ItemTemplate 中使用DataTemplate 来表示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 是来自我正在使用的不同程序集的命名空间。
任何想法将不胜感激,在此先感谢您!
【问题讨论】:
-
我找到了这篇文章 (neilmosafi.blogspot.com/2007/08/…),但是当我尝试为我的 MenuItem 调整它时,抛出了一个漂亮的异常。有什么想法吗?