1

MenuItemヘッダーの下にいくつかの動的リストがあります。アイテムから来るアイテムのスタイルを設定したいが、CollectionContainerすでに type のヘッダーはスタイルしたくない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>

これらの特定のリストのみをスタイルするにはどうすればよいですか?

4

1 に答える 1

1

1 つの解決策は、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>
于 2016-03-11T03:22:12.740 に答える