更改包含 ContentTemplate 和 TextBlock 的 ContentPresenter 的前景色
Changing the Foreground colour of a ContentPresenter containing a ContentTemplate and TextBlock
我有如下代码,是一个带几何图标的按钮
<Button Style="{StaticResource Button}" IsEnabled="False">
<DockPanel>
<ContentControl Template="{StaticResource geometryMenuContentTemplate}"
DataContext="{StaticResource keyboardButtonGeometry}"
Style="{StaticResource TopBarIcon}" />
<TextBlock Style="{StaticResource TopBarHeaderText}" Text="KEYBOARD"/>
</DockPanel>
</Button>
<ControlTemplate x:Key="geometryMenuContentTemplate" TargetType="ContentControl">
<Canvas>
<Path Width="25" Height="25" Stretch="Fill" Fill="{TemplateBinding Foreground}" Data="{Binding}"/>
</Canvas>
</ControlTemplate>
<StreamGeometry x:Key="keyboardButtonGeometry">
F1 M 15.8333,2...
</StreamGeometry>
样式为:
<Style x:Key="Button" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Foreground" Value="{StaticResource StandardForegroundColor}" />
<Setter Property="Template" Value="{StaticResource ButtonTemplate}" />
</Style>
<ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
<Border BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}"
Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}">
<ContentPresenter Name="ButtonContentPresenter" Margin="{TemplateBinding Padding}" TextBlock.Foreground="Red"/>
</Border>
</ControlTemplate>
<Style x:Key="TopBarHeaderText" TargetType="TextBlock" BasedOn="{StaticResource StatsHeaderText}">
<Setter Property="Foreground" Value="White" />
</Style>
我的代码的可视化输出如下:
我想(在 ButtonTemplate
中)将名为 ButtonContentPresenter
的 ContentPresenter
中 Textblock
的前景色更改为红色。
我的代码只改变了图标的颜色,而不是 TextBlock
。为什么?
如何仅更改 Textblock
颜色?
我想要这样的东西:
通读您的代码,我注意到您的 TextBlock 有一个名为 TopBarHeaderText 的样式,但我在您的问题中没有看到该样式。图像改变颜色的原因是因为您将其设置为填充 {TemplateBinding Foreground} - 也许将该设置放入 TextBlock 的样式(TopBarHeaderText 样式)?
看起来(从我看到的代码来看)您可能不小心翻转了 geometryMenuContentTemplate 和 TopBarHeaderText 中的颜色定义。
我有如下代码,是一个带几何图标的按钮
<Button Style="{StaticResource Button}" IsEnabled="False">
<DockPanel>
<ContentControl Template="{StaticResource geometryMenuContentTemplate}"
DataContext="{StaticResource keyboardButtonGeometry}"
Style="{StaticResource TopBarIcon}" />
<TextBlock Style="{StaticResource TopBarHeaderText}" Text="KEYBOARD"/>
</DockPanel>
</Button>
<ControlTemplate x:Key="geometryMenuContentTemplate" TargetType="ContentControl">
<Canvas>
<Path Width="25" Height="25" Stretch="Fill" Fill="{TemplateBinding Foreground}" Data="{Binding}"/>
</Canvas>
</ControlTemplate>
<StreamGeometry x:Key="keyboardButtonGeometry">
F1 M 15.8333,2...
</StreamGeometry>
样式为:
<Style x:Key="Button" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Foreground" Value="{StaticResource StandardForegroundColor}" />
<Setter Property="Template" Value="{StaticResource ButtonTemplate}" />
</Style>
<ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
<Border BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}"
Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}">
<ContentPresenter Name="ButtonContentPresenter" Margin="{TemplateBinding Padding}" TextBlock.Foreground="Red"/>
</Border>
</ControlTemplate>
<Style x:Key="TopBarHeaderText" TargetType="TextBlock" BasedOn="{StaticResource StatsHeaderText}">
<Setter Property="Foreground" Value="White" />
</Style>
我的代码的可视化输出如下:
我想(在 ButtonTemplate
中)将名为 ButtonContentPresenter
的 ContentPresenter
中 Textblock
的前景色更改为红色。
我的代码只改变了图标的颜色,而不是 TextBlock
。为什么?
如何仅更改 Textblock
颜色?
我想要这样的东西:
通读您的代码,我注意到您的 TextBlock 有一个名为 TopBarHeaderText 的样式,但我在您的问题中没有看到该样式。图像改变颜色的原因是因为您将其设置为填充 {TemplateBinding Foreground} - 也许将该设置放入 TextBlock 的样式(TopBarHeaderText 样式)?
看起来(从我看到的代码来看)您可能不小心翻转了 geometryMenuContentTemplate 和 TopBarHeaderText 中的颜色定义。