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>

它愉快地接受来自baseStyleFontSizeFontFamily

我试着为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派生的。它可以在这里找到。

所以,我不明白为什么我会犯这个错误?

InvalidOperationException:只能基于目标类型为基类型';的Style;文本块';

如注释中所述,TextBlock不是从Control派生的,而是直接从FrameworkElement派生的。在TextBlockControl之间不存在具有FontSizeFontFamily的公共类。他们都单独实施。它可以为FrameworkElement创建样式,设置附加属性TextElement.FontSizeTextElement.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>