2012-10-16 46 views
0

首先,我有一个风格的应用程序资源的资源,像这样:它TextBlock的风格将覆盖模板化父样式

<Style x:Key="ContentTextBlock" TargetType="FrameworkElement"> 
    <Setter Property="TextBlock.HorizontalAlignment" Value="Center"/> 
    <Setter Property="TextBlock.VerticalAlignment" Value="Center"/> 
    <Setter Property="TextBlock.FontFamily" Value="Verdana"/> 
    <Setter Property="TextBlock.FontSize" Value="12"/> 
    <Setter Property="TextBlock.FontWeight" Value="Normal"/> 
    <Setter Property="TextBlock.Foreground" Value="Orange"/> 
</Style> 

我创建了有一个头一个自定义的控制和内容。 这是内容部分看起来像在自定义控制模板:

<ContentPresenter Content="{TemplateBinding Content}" 
        Style="{DynamicResource ContentTextBlock}"> 
</ContentPresenter> 

我的问题是,如果我使用创建的控制,像这样:

<local:CutPage.Content> 
      <TextBlock>Header</TextBlock> 
</local:CutPage.Content> 

的字体大小,fontWeight设置,并且fontFamily得到重写通过TextBlock的显式或默认样式(我认为是这种情况,但我不确定)。我已经阅读了有关依赖性价值顺序优先顺序的文章,但我怎么能猜到什么是重写我的模板样式?我希望所有进入自定义控件的头元素都使用这些值。我应该怎么做?

P.S.有趣的是,一些风格制定者的工作(如垂直和水平居中文本),但其他人不!

回答

1

如果你想保持你的CustomControl,你必须定义依赖属性相匹配的文本块属性,并在您的ControlTemplate绑定。

我会做的是创造,从文本框派生CustomControl,然后改变它的控件模板添加你需要什么,你绑定需要诠释,他的ControlTemplate一切。

或者,您可以使用HeaderedContentControl,似乎正是你所需要的。

<HeaderedContentControl FontFamily="Arial" Foreground="Red" Header="Hello World"> 
    <Rectangle Width="10" Height="10" Fill="Blue" /> 
</HeaderedContentControl> 
1

你能不能把你的基本样式在一个单独的文件,不是用它继承自它在你的文字块,某事像这样:

<TextBlock> 
<Style TargetType="..." BasedOn="{StaticResource MyGeneralStyle}">      <Setter Property="Foreground" Value="..."/> 
</Style> 
</TextBlock>