簡體   English   中英

如何通過XAML為Enum類型的子項設置MenuItem的IsChecked屬性?

[英]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.First0 (如此處回答 )無效。

建議使用DataTrigger嗎? 如果是這樣,我怎么用XAML編寫它? 或者我應該使用DataTemplate的內ItemTemplateMenuItem

我還嘗試過使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM