InvalidOperationException:只能基于目标类型为基类型';的Style;文本块';
本文关键字:类型 基类 文本 Style 于目标 目标 InvalidOperationException | 更新日期: 2023-09-27 18:20:14
我创建了一个名为baseStyle的样式,如下所示:
<Style TargetType="{x:Type Control}" x:Key="baseStyle">
<Setter Property="FontSize" Value="30" />
<Setter Property="FontFamily" Value="Saumil_guj2" />
</Style>
然后我把它用于ListBoxItem,比如:
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource baseStyle}">
</Style>
它愉快地接受来自baseStyle
的FontSize
和FontFamily
。
我试着为TextBlock做一件类似的事情:
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource baseStyle}">
</Style>
现在它在抱怨。我是说它给了我灵感:
InvalidOperationException: Can only base on a Style with target type
that is base type 'TextBlock'.
所以,我查看了MSDN。
在那里我发现ListBoxItem是从System.Windows.Controls间接派生的。它可以在这里找到。
在那里我还发现TextBlock也是从System.Windows.Controls派生的。它可以在这里找到。
所以,我不明白为什么我会犯这个错误?
如注释中所述,TextBlock
不是从Control
派生的,而是直接从FrameworkElement
派生的。在TextBlock
和Control
之间不存在具有FontSize
和FontFamily
的公共类。他们都单独实施。它可以为FrameworkElement
创建样式,设置附加属性TextElement.FontSize
和TextElement.FontFamily
<Style TargetType="{x:Type FrameworkElement}" x:Key="baseStyle">
<Setter Property="TextElement.FontSize" Value="30" />
<Setter Property="TextElement.FontFamily" Value="Saumil_guj2" />
</Style>
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource baseStyle}">
</Style>
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource baseStyle}">
</Style>