【问题标题】:How to set a MenuItem's IsChecked property for a child of type Enum via XAML?如何通过 XAML 为 Enum 类型的子项设置 MenuItem 的 IsChecked 属性?
【发布时间】: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.First0(如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 是来自我正在使用的不同程序集的命名空间。

任何想法将不胜感激,在此先感谢您!

【问题讨论】:

标签: c# .net wpf xaml enums


【解决方案1】:

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

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

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

在您的示例中,您检查标题是否等于 sting "enums:AnEnum.ItemA" 而不是枚举 AnEnum 成员 ItemA。

【讨论】:

  • 这听起来真是个好消息,我会检查一下并通知您,也感谢您对这个问题的意见!
【解决方案2】:

你可以这样做。这将绑定到子菜单项的 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 2023-04-02
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    相关资源
    最近更新 更多