簡體   English   中英

Wpf 中 MenuItems 的選擇性樣式

[英]Selective styling of MenuItems in Wpf

我有一個MenuItem ,標題下有幾個動態列表。 我想設置來自CollectionContainer項目的項目的樣式,而不是已經屬於MenuItem類型的標題。 我以前一直通過使用DataTemplate來做到這一點,但遇到了這個問題

<MenuItem Header="Test">
    <MenuItem.ItemsSource>
        <CompositeCollection>
            <MenuItem Header="List A" IsEnabled="False" />
            <CollectionContainer Collection="{Binding Source={StaticResource ListACollectionViewSource}}" />
            <MenuItem Header="List B" IsEnabled="False" />
            <CollectionContainer Collection="{Binding Source={StaticResource ListBCollectionViewSource}}" />
        </CompositeCollection>
    </MenuItem.ItemsSource>
</MenuItem>

如何僅設置那些特定列表的樣式?

一種解決方案是為 MenuItems 設置默認樣式,然后生成的項目將使用該樣式。 然后,對於未生成的項目,您可以將樣式顯式設置為另一種樣式。

<!-- this will be the style of each generated MenuItem -->
<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource {x:Type MenuItem}}">
  <Setter Property="Header" Value="{Binding Path=Text, StringFormat=Example {0}}" />
  <Setter Property="Command" Value="{Binding Path=Command}" />
  <Setter Property="Icon" Value="{StaticResource TheImage}" />
</Style>

它變得有點冗長,但它允許混合動態和非動態項目:

<Menu DockPanel.Dock="Top">
  <Menu.ItemTemplate>
    <HierarchicalDataTemplate DataType="{x:Type local:MenuItemViewModel}" ItemsSource="{Binding Path=MenuItems}">
      <TextBlock Text="{Binding}"/>
    </HierarchicalDataTemplate>
  </Menu.ItemTemplate>
  <Menu.ItemsSource>
    <CompositeCollection>
      <MenuItem Header="123" Style="{StaticResource NormalMenuItem}">
        <MenuItem Header="Beta1" Style="{StaticResource NormalMenuItem}"/>
        <MenuItem Header="Beta2"  Style="{StaticResource NormalMenuItem}"/>
        <MenuItem Header="Beta3"  Style="{StaticResource NormalMenuItem}"/>
        <MenuItem Header="Close" Command="Close" CommandTarget="{Binding ElementName=Window}" />
      </MenuItem>
      <CollectionContainer Collection="{Binding Source={StaticResource Items}}" />
    </CompositeCollection>
  </Menu.ItemsSource>
</Menu>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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