2011-06-01 40 views
0

我正在尝试为TabItem标题编写自己的控件模板,并且已经获得了基本布局,但现在我希望将样式应用于内容例如,处理文本块的大小和字体。WPF:通过ControlTemplate和ContentPresenter.Resources向自定义TabItem标题应用样式的问题

为了测试这个,我在tabitem标题中放了一个椭圆,并试图用Gold刷子通过样式填充该椭圆。但是,它不起作用。椭圆是存在的,并且正在应用控件模板,但椭圆的填充不是Gold。 ContentPresenter.Resources中的样式被忽略(并且Resharper甚至将它变成灰色来证明这一点)。任何想法我做错了什么?谢谢。

下面是代码:

<TabItem> 
    <TabItem.Template> 
     <ControlTemplate x:Name="theTabItemControlTemplate" TargetType="{x:Type TabItem}"> 
      <Border BorderBrush="DarkBlue" BorderThickness="10"> 
       <Grid> 
        <ContentPresenter ContentSource="Header" RecognizesAccessKey="True"> 
         <ContentPresenter.Resources> 
          <Style TargetType="{x:Type Ellipse}"> 
           <Setter Property="Ellipse.Fill" Value="Gold"/> 
          </Style> 
         </ContentPresenter.Resources> 
        </ContentPresenter> 
       </Grid> 
      </Border> 
     </ControlTemplate> 
    </TabItem.Template> 
    <TabItem.Header> 
     <Ellipse Stroke="Black" StrokeThickness="2" Width="100" Height="30" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
    </TabItem.Header> 
</TabItem> 

回答

1

移动你的风格一级upper.ie,将其移动到ControlTemplate.Resources,也将努力fine.I敢不知道为什么在这个问题的代码不工作。这可能是因为contentpresenter中的控件在遇到样式时已经构建好了。

<ControlTemplate x:Name="theTabItemControlTemplate" TargetType="{x:Type TabItem}"> 
      <ControlTemplate.Resources> 
       <Style TargetType="{x:Type Ellipse}"> 
        <Setter Property="Fill" Value="Red"/> 
       </Style> 
      </ControlTemplate.Resources> 
      <Border BorderBrush="DarkBlue" BorderThickness="10"> 
     <Grid> 
      <ContentPresenter ContentSource="Header" RecognizesAccessKey="True"> 

      </ContentPresenter> 
     </Grid> 
    </Border> 
</ControlTemplate> 
+0

谢谢,这很好。你可能对ContentPresenter资源是正确的 - 我确信我看到这个例子在某个地方使用,所以它应该工作,但不要担心。 顺便提一下,ReSharper仍然很困惑,因为风格仍然灰暗。我猜想它没有发生,“ContentPresenter”元素可能会带来任何其他元素,包括椭圆。 – 2011-06-01 13:28:59

相关问题