WPF菜单项前景设置为子菜单 - 只希望在主菜单上。

4

我有一个WPF菜单,我将前景颜色设置为绑定(使用转换器),比如我将顶级菜单的前景色设置为绿色,所有子菜单都会变成绿色(但我不想要这样)。

代码示例: 我希望“Finishing Position”顶级菜单变成绿色或者根据转换器的设置进行变化。 但是,当“MenuItemDeleteSelection”命令绑定为Can Execute=false时,我不希望它变成相同的颜色,而是保持黑色或默认的灰色状态。

<Menu>
    <MenuItem Header="{Binding FinishingPosition,Converter={StaticResource FinishingPositionToDisplayTextConverter1}}"  Height="17" Width="12" Padding="0" Name="SelectionStatusHeader" Foreground="{Binding FinishingPosition,Converter={StaticResource FinishingPositionToColourConverter1}}" Background="White" HorizontalContentAlignment="Center">
        <MenuItem Name="MenuItemDeleteSelection" Header="Delete Selection"
                    Command="{Binding Path=DataContext.DeleteSelectionCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 
                    CommandParameter="{Binding}" />
1个回答

4

在您的菜单资源中为MenuItem设置默认样式,以便它自动应用于所有菜单项。

将默认值设置为SystemColors.MenuTextBrushKey,这将应用于除覆盖它之外的所有菜单项。

<Menu>
   <Menu.Resources>
       <Style TargetType="MenuItem">
           <Setter Property="Foreground"
              Value="{StaticResource {x:Static SystemColors.MenuTextBrushKey}}"/>
       </Style>
    </Menu.Resources>
    <MenuItem Foreground="Green"/>
    <MenuItem/>
    <MenuItem/>
</Menu>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接