WPF - 对标准样式的控件使用控件继承

  • 本文关键字:控件 继承 样式 标准 WPF wpf
  • 更新时间 :
  • 英文 :


我有一个包含许多窗口和用户控件的 WPF 应用程序,我想为整个应用程序中显示的某些控件实现标准样式。 例如,假设我在整个应用程序中需要两个标准文本块:一个用于大标题,一个用于小标题。它们之间的唯一区别是字体大小,分别是 36 和 24。 所有其他属性(颜色、字体系列等)都可以由 TextBlock 模板或全局 TargetType="{x:Type TextBlock}" 样式设置。

当然,我可以创建两个全局命名样式,它们只设置字体大小,并在整个 XAML 中将这些静态资源样式自由地应用于我的文本块,或者在不会干扰其他文本块的 TextBlock 之上的最高可能级别。 但是作为替代方案,这将消除在许多地方设置 Style 标记的要求,从 TextBlock 继承是一种好方法吗?

文本块控件:

class TextBlockLargeHeading : TextBlock
{
    public TextBlockLargeHeading()
    { }
}
class TextBlockSmallHeading : TextBlock
{
    public TextBlockSmallHeading()
    { }
}

全球资源:

<Application.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="Foreground" Value="Red" />
    </Style>
    <Style TargetType="MyApp:TextBlockLargeHeading" BasedOn="{StaticResource {x:Type TextBlock}}" >
        <Setter Property="FontSize" Value="36" />
    </Style>
    <Style TargetType="MyApp:TextBlockSmallHeading" BasedOn="{StaticResource {x:Type TextBlock}}" >
        <Setter Property="FontSize" Value="24" />
    </Style>
</Application.Resources>

然后,要在任何地方使用它们,只需引用自定义文本块:

<StackPanel>
    <MyApp:TextBlockLargeHeading Text="Large" />
    <MyApp:TextBlockSmallHeading Text="Small" />
</StackPanel>

这将创建两个具有适当字体大小的红色文本块。

这是一个合理的方法吗?如果我有 100 个这些实例,无论是可维护性还是其他方面,有什么问题吗? 是否有更好(更安全或更少的代码/XAML)方法? 也许改用用户控件?

谢谢!

没有理由做所有这些。创建样式并直接使用它们。

....
<Style x:Key="DefaultTextBlockStyle" TargetType="TextBlock">
    <Setter Property="Foreground" Value="Red" />
    <Setter Property="FontSize" Value="24" />
</Style>
<Style x:Key="LargeTextBlockStyle" TargetType="TextBlock" BasedOn="{StaticResource DefaultTextBlockStyle}">
    <Setter Property="FontSize" Value="36" />
</Style>
<!-- Style applies to all TextBoxes -->
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource DefaultTextBlockStyle}" />
...
<StackPanel>
    <TextBlock Text="Large" Style="{StaticResource LargeTextBlockStyle}"/>
    <TextBlock Text="Small"/>
</StackPanel>

最新更新