我正在寻找一种仅限XAML的方法来定义特定Window中的一个未命名样式,该样式影响所有TextBox,甚至是UserControls中的那些TextBox。
这是一个例子:假设我有一个特定的窗口,我想在其中为所有TextBox设置Foreground属性为Red,包括UserControls中包含的那些。我想这样做:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Width="300"
SizeToContent="Height">
<Window.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Setters>
<Setter Property="Foreground" Value="Red"/>
</Style.Setters>
</Style>
</Window.Resources>
<StackPanel Orientation="Vertical">
<TextBox Text="A-Regular"/>
<TextBox Text="B-Bold">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Setters>
<Setter Property="FontWeight" Value="Bold"/>
</Style.Setters>
</Style>
</TextBox.Style>
</TextBox>
<local:MyUserControl/>
<TextBox Text="C-Regular"/>
</StackPanel>
</Window>
使用过的UserControl如下所示:
<UserControl x:Class="WpfApplication1.MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Vertical">
<TextBox Text="Like A, but in UserControl"/>
<TextBox Text="Like B, but in UserControl">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Setters>
<Setter Property="FontWeight" Value="Bold"/>
</Style.Setters>
</Style>
</TextBox.Style>
</TextBox>
</StackPanel>
</UserControl>
生成的窗口是:
一切都很好,除了TextBox&#34;比如B,但是在UserControl&#34;中,它是粗体和黑色。我希望看到红色文本,就像在所有其他TextBox中一样。
有没有办法让Window资源中的未命名样式影响UserControl中的所有TextBox,甚至那些使用BasedOn扩展当前TextBox样式的文本框?
我正在寻找一种方式,我没有适应所有我调用的地方#34; UserControl(即我在窗口中有<local:MyUserControl/>
的位置)。我也不想调整UserControl本身,因为它可能在第三方库中。
答案 0 :(得分:0)
只需将Style
放入<Application.Resources>