如何通过XAML为Enum的子类设置MenuItem的IsChecked属性? [英] How to set a MenuItem's IsChecked property for a child of type Enum via XAML?

查看:107
本文介绍了如何通过XAML为Enum的子类设置MenuItem的IsChecked属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用此解决方案将MenuItem绑定到枚举。

I've bound a MenuItem to a Enum using this solution.

枚举值正确显示,但我似乎无法为MenuItem的子项目设置默认检查值。

The Enum Values are displayed correctly, yet I cannot seem to set a default checked value for the MenuItem's children items.

或者,我希望MenuItem在默认情况下检查其子项之一(我使用的枚举的值)。

Alternatively put, I would like the MenuItem to have one of its children items (the values of the enum I'm using) checked per default.

我尝试了以下代码,使用Style和触发Setter:

I've tried the following code, using a Style and a triggered 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,我也尝试过 AnEnum。触发器值属性中的第一个 0 (如在这里回答),没有用。

The enum contains values such as ItemA, I've also tried AnEnum.First or 0 in the Trigger Value attribute (as answered here), to no avail.

将一个 DataTrigger 是可取的吗?如果是这样,我怎么能在XAML中写?
或者我应该在 ItemTemplate 中为 MenuItem 使用 DataTemplate code>?

Would a DataTrigger be advisable ? If so, how can I write that in XAML ? Or should I use an DataTemplate within an ItemTemplate for the MenuItem ?

我也试过用代码隐藏在 SomeSetting.Items 相关的方法,但大多数属性(如Current)是只读的。

I've also tried fiddling around in code-behind with SomeSetting.Items -related methods, yet most of the properties (such as Current) are read-only.

我知道你可以写 SomeSettingMenu.ItemsSource = Enum.GetValues(typeof(....))在代码隐藏中,但我又不知道如何通过编程方式在MenuItem中选择一个项目。

I am aware that you can write SomeSettingMenu.ItemsSource = Enum.GetValues(typeof(....)) in code-behind, but yet again I don't know how to select an Item within the MenuItem programmatically.

我也尝试过这个代码,不工作:

I've also tried this code, doesn't work as well :

<Style.Triggers>
  <DataTrigger Binding="{Binding Path=Header}" Value="enums:DisplayType.ItemA">
    <Setter Property="IsChecked" Value="True" />
  </DataTrigger>                 
</Style.Triggers>

枚举是不同程序集的命名空间我正在使用。

enums is a namespace from a different assembly I'm using.

任何想法都不胜感激,谢谢你提前!

Any thoughts would be appreciated, thank you in advance !

推荐答案

在您的解决方案中考虑更改

in your solution consider changing

<Trigger Property="MenuItem.Header" Value="enums:AnEnum.ItemA" >

<Trigger Property="MenuItem.Header" Value="{x:Static enums:AnEnum.ItemA}" >



< 不要枚举AnEnum会员ItemA。

in your example you check that header is equal to sting "enums:AnEnum.ItemA" not to enum AnEnum member ItemA.

这篇关于如何通过XAML为Enum的子类设置MenuItem的IsChecked属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆