[英]How to set a MenuItem's IsChecked property for a child of type Enum via XAML?
我已經使用此解決方案將MenuItem綁定到枚舉。
枚舉值顯示正確,但我似乎無法為MenuItem的子項設置默認的選中值。
換句話說,我希望MenuItem在默認情況下檢查其子項之一(我正在使用的枚舉的值)。
我已經嘗試過使用樣式和觸發的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
(如此處回答 )無效。
建議使用DataTrigger
嗎? 如果是這樣,我怎么用XAML編寫它? 或者我應該使用DataTemplate
的內ItemTemplate
的MenuItem
?
我還嘗試過使用SomeSetting.Items
相關的方法在代碼背后進行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
是我正在使用的其他程序enums
的命名空間。
任何想法,將不勝感激,謝謝你!
你可以這樣做。 這將綁定到子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>
在您的解決方案中考慮改變
<Trigger Property="MenuItem.Header" Value="enums:AnEnum.ItemA" >
至
<Trigger Property="MenuItem.Header" Value="{x:Static enums:AnEnum.ItemA}" >
在您的示例中,您檢查標頭等於字符串“ enums:AnEnum.ItemA”,而不是枚舉AnEnum成員ItemA。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.