WPF无法覆盖Button conent前景

时间:2013-07-01 21:30:47

标签: wpf button resources styles

我无法获取MVVM View的按钮前景,以覆盖我在App.xaml中为TextBlock设置的默认样式。

我在App.xaml中设置了TextBlock样式,默认情况下TextBlock到Gainsboro的前景如下:

- 在App.xaml中

<!-- Default TextBlock Style-->
<Style TargetType="TextBlock">
    <Setter Property="Foreground" Value="Gainsboro" />
</Style>

我希望所有按钮的前景与默认的TextBlock不同。我的MVVM视图中的按钮布局类似于以下内容:

- 在myView.xaml

<Button Content="Scan" HorizontalAlignment="Left"  VerticalAlignment="Bottom"
        Margin="10,0,0,10" Width="85" Foreground="Black" />

可悲的是,我的按钮不符合我明确设置的颜色,它仍然使用默认的TextBlock前景色。有关如何让它行为正常的任何想法?我甚至尝试在按钮上设置TextBlock.Foreground,但仍然没有快乐。

BTW,是否有最佳实践来设置应用程序的前景色?我认为我的方法是可以接受的。

1 个答案:

答案 0 :(得分:1)

这一切都回到DependencyProperty Value Precedence。不幸的是,由于Button的{​​{1}}由TextBlock生成,因此它未明确设置ContentPresenter属性。它是继承的。哪个方式在列表中。好消息是,您可以通过明确地将Foreground设置为TextBlock来轻松完成:

Content

要应用全局<Button HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="9,0,0,9" Width="85"> <TextBlock Foreground="Black" Text="Scan" /> </Button> 样式,您有几个选择。如果您没有创建自己的主题,那么您所做的几乎是您唯一的选择。但是,如果要重新设置控件样式,可以使用默认前景添加Text。将其设置为默认Setter Window也很重要,因此Style之类的内容可以继承该值。

在很多情况下,设置TextBlock会为您提供所需的大部分内容。但是,有些Window.Foreground明确将其Control设置为默认样式,因此它们不会继承您的前景。