我无法获取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,是否有最佳实践来设置应用程序的前景色?我认为我的方法是可以接受的。答案 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
设置为默认样式,因此它们不会继承您的前景。