2014-08-30 61 views
3

我创建了一个名为baseStyle风格类似这样的基础:出现InvalidOperationException:只能在与目标类型风格是基本类型“的TextBlock”

<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:

​​

现在它的抱怨。我的意思是它给了我免除︰

InvalidOperationException: Can only base on a Style with target type 
that is base type 'TextBlock'. 

所以,我检查了MSDN。

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

那里我还发现TextBlock也从System.Windows.Controls派生。它可以被发现here

所以,我不明白为什么我得到这个错误?

+2

创建样式'TextBlock'不从'Control'而是直接从'FrameworkElement'派生。 'TextBlock'和'Control'之间没有共同的类,它具有'FontSize'和'FontFamily'。他们都分开实施它 – dkozl 2014-08-30 19:52:36

+1

@dkozl你应该作出回答。 – 2014-08-30 19:55:29

回答

11

正如在评论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> 
+1

谢谢@dkozl。这是完美的。我在发布这个问题后发布了FrameworkElement,并且因为它不包含FontSize和FontFamily而出现另一个错误。现在我学到了新的教训。在这种情况下,我应该使用TextElement.FontSize。再一次感谢你。 – Vishal 2014-08-30 20:32:34

相关问题