我的样式应用于我在资源字典中定义的所有文本框。
<Style TargetType="TextBlock">
<Setter Property="TextBlock.FontSize" Value="{Binding Source={StaticResource ApplicationUserSettings}, Path=fontSize, Mode=OneWay}" />
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
<Setter Property="TextBlock.VerticalAlignment" Value="Center"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="TextBox.FontFamily" Value="{Binding Source={StaticResource ApplicationUserSettings}, Path=fontName, Mode=OneWay}"/>
</Style>\
fontsize和fontstyle属性绑定到一个特殊的用户设置类,该类实现了iNotifyPropertyChanged,它允许更改字体大小和fontfamily,以便在整个应用程序中立即传播。
然而,在我创建的UserControl中(具有讽刺意味的是,允许用户自定义其字体设置的屏幕),我希望字体大小和fontfamily保持静态。无论我尝试什么,我的全局字体设置都会覆盖我在用户控件中设置的内容:
<UserControl x:Class="ctlUserSettings"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:R2D2" Height="400" Width="600">
<Grid>
<Grid.Resources>
<Style x:Key="tbxStyle" TargetType="TextBox">
<Style.Setters>
<Setter Property="FontSize" Value="14"/>
<Setter Property="FontFamily" Value="Tahoma"/>
</Style.Setters>
</Style>
...等......
<StackPanel Margin="139,122.943,41,0" Orientation="Horizontal" Height="33" VerticalAlignment="Top">
<TextBox Style="{x:Null}" FontSize="13" FontFamily="Tahoma" HorizontalAlignment="Left" MaxWidth="500" MinWidth="350" Name="txtReaderPath" Height="Auto" VerticalAlignment="Top" />
<TextBox Style="{x:tbxStyle}" Margin="15,0,0,0" HorizontalAlignment="Left" Name="txtPath" Width="43" Height="23" VerticalAlignment="Top">(some text)</Button>
</StackPanel>
我尝试将Style设置为{x:Null},设置内联自定义字体大小,并在此控件的资源中设置样式。没有优先于我的资源字典中的样式。
正如您所看到的,我展示了我在上面的XAML示例中尝试过的所有内容......
我错过了什么?
答案 0 :(得分:2)
另一种方法是在UserControl上添加一个空样式,例如:
<UserControl.Resources>
<Style TargetType="TextBlock" />
</UserControl.Resources>
阻止全局样式 - 也可以将其添加到StackPanel资源以实现更细粒度的控制
答案 1 :(得分:1)
好的,我看到现在发生了什么。
在我的UserControl的构造函数中,我甚至尝试设置.Style = Nothing,只是为了看看会发生什么......我的全局风格仍在继续并自我应用。
我必须假设在构造函数运行后全局样式应用于我的控件,因此无论如何全局样式都会侵入。最后,我简单地将“全球”风格转移到了一个仅影响我需要的地方。
不太方便,但至少我可以继续我的项目