wpf - 无法覆盖由 TargetType 在单个特定控件上设置的全局 WPF 样式

标签 wpf user-controls styles font-size font-family

我有一个应用于我所有文本框的样式,在资源字典中定义..

<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 属性绑定(bind)到实现 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>

... ETC...
         <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 示例中尝试过的所有东西......

我错过了什么?

最佳答案

另一种选择是在 UserControl 上添加一个空样式,例如:

<UserControl.Resources>
        <Style TargetType="TextBlock" />
</UserControl.Resources>

这会阻止全局样式 - 也可以将其添加到 StackPanel 资源以进行更细粒度的控制
  • 更长的解释here
  • 关于wpf - 无法覆盖由 TargetType 在单个特定控件上设置的全局 WPF 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524864/

    相关文章:

    wpf - xaml 中的常量

    wpf - 组合框下拉列表中的项目和选定项目的不同模板

    styles - 使用 AutoLISP 生成新的尺寸样式

    javascript - 在 javascript 文件中访问 CSS 文件

    c# - 在 UserControl WPF 的视口(viewport)中使用 VisualBrush

    .net - 拦截/覆盖自定义控件上的 Name 属性?

    php - 监控应用程序的用户跟踪、统计和审计

    asp.net - 使用两个控件开始和结束 Div - Asp.net mvc

    c++ - 无法在QT选项卡小部件中向选项卡(栏)和选项卡( Pane )添加样式

    c# - 扩展工具包 SplitButton : use ComboBox ItemsSource as DropDownContent