InvalidOperationException:只能基于具有基类型“TextBlock”的目标类型的Style

时间:2014-08-30 19:33:52

标签: c# .net wpf xaml

我创建了一个名为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>

很高兴接受来自FontSize的{​​{1}}和FontFamily

我试图为TextBlock做类似的事情:

baseStyle

现在抱怨。我的意思是它给了我一个例外:

<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource baseStyle}">

</Style>

所以,我在MSDN上查了一下。

我发现ListBoxItem间接地从System.Windows.Controls派生。它可以找到here

在那里我还发现TextBlock也派生自System.Windows.Controls。它可以找到here

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

1 个答案:

答案 0 :(得分:16)

正如评论TextBlock中所述,并非来自Control,而是直接来自FrameworkElementTextBlockControl之间没有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>