0

我无法让我的 MVVM 视图的按钮前景覆盖我在 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,但仍然没有乐趣。

顺便说一句,是否有在应用程序范围内设置前景色的最佳做法?我假设我的方法是可以接受的。

4

1 回答 1

1

这一切都回到了DependencyPropertyValue Precedence。不幸的是,由于Button'sTextBlock是由 生成的ContentPresenter,因此它没有显式设置Foreground属性。它是遗传的。这在名单上很差好消息是您可以通过将 a 显式设置TextBlockContent

<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将为您提供您想要的大部分内容。但是,有些Controls 明确地将它们设置Foreground为默认样式,因此它们不会继承您的前景。

于 2013-07-01T21:46:08.080 回答