我的 Button
全局 (App.xaml
) ControlTemplate 不想覆盖 Foreground
属性的默认黑色。这似乎是一个相对常见的问题,但我尝试了各种解决方案,包括将 BasedOn
设置为 null
作为 described in this question .
我的代码如下,您可以看到我尝试在 Grid
和 ContentPresenter
上显式声明前景色。但颜色仍然是黑色。 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/