c# - WPF 按钮 ControlTemplate 不会覆盖继承的前景

标签 c# wpf xaml wpf-controls

我的 Button 全局 (App.xaml) ControlTemplate 不想覆盖 Foreground 属性的默认黑色。这似乎是一个相对常见的问题,但我尝试了各种解决方案,包括将 BasedOn 设置为 null 作为 described in this question .

我的代码如下,您可以看到我尝试在 GridContentPresenter 上显式声明前景色。但颜色仍然是黑色。 Snoop 告诉我它是默认继承的,但似乎没有说明从哪里继承,并将父 ContentPresenter 显示为将 TextElement.Foreground 设置为正确的颜色。

这段代码中有什么我应该设置的吗?我错过了某个元素或属性吗?

<Style TargetType="Button">
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="VerticalAlignment" Value="Center" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid x:Name="grid" TextBlock.Foreground="#FFD3D3D2">
                    <Border x:Name="border" Background="Transparent" BorderBrush="#FF5C7999" BorderThickness="2" CornerRadius="{Binding RelativeSource={RelativeSource TemplatedParent},Path=ActualHeight,Converter={StaticResource HalfConverter}}" Padding="10">
                        <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,0" TextBlock.Foreground="#FFD3D3D2">
                        </ContentPresenter>
                    </Border>
                </Grid>
...

最佳答案

事实证明,使用这种样式的按钮将其内容设置为文本以外的内容,或者在内部显式添加无样式的 TextBlock,并且这会覆盖 Foreground 设置的任何内容 原始代码中的属性。

确保文本被设置为按钮内容,或者确保其包装器的样式适当,解决了问题。

看来橡皮鸭调试还是有效的。

关于c# - WPF 按钮 ControlTemplate 不会覆盖继承的前景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40305508/

相关文章:

c# - 不同颜色的gridview数据显示取决于文本

WPF如何继承带有颜色动画的样式来改变颜色

c# - XAML 数据绑定(bind)清晰度

c# - Windows Phone 8 中的语音识别

c# - 使用 iTextSharp 将数据写入 PDF 效果很好,但 Acrobat Reader 在关闭文件时询问 'Do you want to save changes'

WPF:如何将控件绑定(bind)到由多个依赖属性组成的公式?

wpf - ListBox.ScrollIntoView() 似乎在 WP7 中不起作用

c# - .Net Matrix3D Transform() 究竟做了什么/为什么我得到 "- infinity"?

c# - 我如何从框架中获取页面实例?

c# - 如何从通过 USB 连接的相机读取文件