我有一个带有许多窗口和用户控件的 WPF 应用程序,我想为整个应用程序中出现的某些控件实现标准样式。例如,假设我在整个应用程序中需要两个标准 TextBlock:一个用于大标题,一个用于小标题。它们之间的唯一区别是字体大小,分别是 36 和 24。所有其他属性(颜色、字体系列等)都可以通过 TextBlock 模板或全局 TargetType="{x:Type TextBlock}" 样式设置。
当然,我可以创建两个全局命名样式,它们只设置字体大小并将这些静态资源样式在整个 XAML 中自由地应用到我的 TextBlocks,或者在不会干扰其他 TextBlocks 的 TextBlocks 之上的最高级别。但是作为替代方案,这将消除在许多地方设置 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)的方法?也许改用用户控件?
谢谢!