【问题标题】:Changing the Foreground colour of a ContentPresenter containing a ContentTemplate and TextBlock更改包含 ContentTemplate 和 TextBlock 的 ContentPresenter 的前景色
【发布时间】:2016-05-02 11:05:12
【问题描述】:

我有以下代码,它是一个带有几何图标的按钮

<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 中)将名为ButtonContentPresenterContentPresenter 内的Textblock 的前景色更改为红色。 我的代码只改变了图标的颜色,而不是TextBlock。为什么? 如何仅更改Textblock 颜色

我想要这样的东西:

【问题讨论】:

  • 您的 TextBlock 不在 ContentControl 内,并且您的 Style 是针对按钮控件而不是 TexBlock 控件

标签: c# wpf xaml textblock contentpresenter


【解决方案1】:

通读您的代码,我注意到您的 TextBlock 有一个名为 TopBarHeaderText 的样式,但我在您的问题中没有看到该样式。图像更改颜色的原因是因为您将其设置为填充为 {TemplateBinding Foreground} - 也许将该设置放入 TextBlock 的样式(TopBarHeaderText 样式)?

看起来(从我看到的代码中)您可能不小心翻转了 geometryMenuContentTemplate 和 TopBarHeaderText 中的颜色定义。

【讨论】:

    猜你喜欢
    • 2014-02-26
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    相关资源
    最近更新 更多