我正在ExpressionDark
为我的 WPF 应用程序使用主题,它有一个自定义样式用于MenuItems
. 当 aMenuItem
被禁用时,它应该使用灰色样式来反映这一点,并且它适用于控件MenuItems
内部Menu
:
但是,它不适用于MenuItems
(ContextMenu
禁用复制)
我已将问题追查到 TextBlock 样式,如果我删除此样式,它适用于 ContextMenu,但其他样式会随着它的删除而中断
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="{DynamicResource TextBrush}" />
</Style>
编辑:无论我使用 aMenuItem
还是我的 custom都没有关系GestureMenuItem
,但重要的是我是否使用 _ char(对于快捷键)如果我删除 _ 那么该样式也不会起作用MainMenu
。
的相关样式MenuItem
:
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
</Trigger>
源代码在这里找到。相关的ContextMenu
XAML:
<TextBox x:Name="Text"
Height="Auto"
TextWrapping="Wrap"
VerticalScrollBarVisibility="Visible"
AcceptsReturn="True"
IsReadOnly="true">
<TextBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Copy" Command="Copy">
<MenuItem.Icon>
<Image Source="{StaticResource IconCopy}"/>
</MenuItem.Icon>
</MenuItem>
<Separator></Separator>
<MenuItem cal:Message.Attach="Clear()" Header="Clear All">
<MenuItem.Icon>
<Image Source="{StaticResource IconDelete}"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</TextBox.ContextMenu>
</TextBox>
MenuItems
在工作主菜单中(GestureMenuItem
继承MenuItem
并使用相同的样式):
<Menu IsMainMenu="True">
<Menu.Resources>
<Image x:Key="ViewIcon" x:Shared="false"
Source="{Binding Path=Icon}" />
</Menu.Resources>
<!-- Items here removed to shorten XAML -->
<MenuItem Header="_Script">
<common:GestureMenuItem x:Name="RunScript" Header="_Run script" Key="F5">
<MenuItem.Icon>
<Image Source="{StaticResource IconPlay}"/>
</MenuItem.Icon>
</common:GestureMenuItem>
<common:GestureMenuItem x:Name="StopScript" Header="_Stop script" Key="F5" Modifiers="Shift">
<MenuItem.Icon>
<Image Source="{StaticResource IconStop}"/>
</MenuItem.Icon>
</common:GestureMenuItem>
</MenuItem>
<!-- Items here removed to shorten XAML -->
</Menu>
手势项目样式:
<Style TargetType="{x:Type Caliburn:GestureMenuItem}" BasedOn="{StaticResource {x:Type MenuItem}}">
</Style>
我想出了一个解决方法,它不会给出完全相同的风格,但它有效,我应该去吗?
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.5"/>
</Trigger>
使用此解决方案,手势文本和图标都是灰色的,因此它实际上可能是比仅将 Forecolor 设置为灰色更好的解决方案: