如果我使用此代码:
<MenuItem x:Name="MenuSave" Header="Save" IsEnabled="False"/>
当MenuSave
被禁用时(在真实的代码中由RoutedUICommand
编程),Header
被禁用并且文本是灰色的。
但如果我需要更多文本,如这里所示:
<MenuItem x:Name="MenuSaveAs" IsEnabled="False">
<MenuItem.Header >
<StackPanel Orientation="Horizontal">
<TextBlock Text="Save as"/>
<TextBlock> ...</TextBlock>
</StackPanel>
</MenuItem.Header>
</MenuItem>
在这种情况下,Header
被禁用,但文本不是灰色的。
如何使用复合文本获得灰色文本?
这只是解释问题的简化代码,真实的的代码是翻译后的术语组合。
2条答案
按热度按时间pu82cl6c1#
如果您通过
HeaderTemplate
添加TextBlock
,则禁用状态将应用颜色。顺便说一下,您可以使用多个Run
,这样会填充同一个TextBlock
。如果您将数据项绑定为Header
,则可以将其在模板中的属性绑定到Run
。或者,如果您需要格式化具有系结属性的字串,请使用
HeaderStringFormat
。如果您坚持直接设定信头,解决方法是将
TextBlock
的Foreground
明确系结至MenuItem
控件样板中ContentPresenter
的TextElement.Foreground
。您可以在每个TextBlock
上系结它,或加入自动套用至范围内所有TextBlock
的隐含样式。请注意 all 这个字。请注意,我建议在一般的句子或段落中使用单个
TextBlock
和Run
,因为使用多个TextBlock
的面板会导致不正确的间距和对齐方式,与TextBlock
和其他文档相关类型提供的排版不匹配。它通常看起来奇怪、脱节,并且没有考虑字体的特性。chhqkbe12#
我发现了另一种简单的方法,使用〈Label Padding=“0”..〉,而不是af〈TextBlock ..〉: