3

我正在尝试为ControlTemplatea制作 a GroupBox,如果在其中TextBlock声明a ,则应将HeaderBackground设置为黄色。

问题是,虽然我在for the中为TextBlocks定义了一个样式,但除了那些由 WPF 自动生成的 s之外,它并没有应用。ContentPresenterHeaderTextBlock

这是代码:

<Window
  x:Class="TestHeaderTemplate.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Window1"
  SizeToContent="WidthAndHeight">
  <Window.Resources>    
    <Style
      TargetType="{x:Type GroupBox}">
      <Setter
        Property="Template">
        <Setter.Value>
          <ControlTemplate
            TargetType="{x:Type GroupBox}">            
            <Border
              Margin="{TemplateBinding Margin}"
              BorderBrush="Black"
              BorderThickness="1">
              <StackPanel>
                <Border
                  Margin="0,0,0,5"
                  BorderThickness="5"
                  BorderBrush="LightBlue"
                  >
                  <ContentPresenter
                    ContentSource="Header">
                    <ContentPresenter.Resources>
                      <Style
                        TargetType="{x:Type TextBlock}">
                        <Setter
                          Property="Background"
                          Value="Yellow" />
                      </Style>
                    </ContentPresenter.Resources>
                  </ContentPresenter>
                </Border>
                <ContentPresenter
                  ContentSource="Content" />
              </StackPanel>
            </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Window.Resources>
  <StackPanel>
    <TextBox
      Text="All TextBoxes in a GroupBox's Header should be yellow, whether declared or autogenerated." />
    <GroupBox
      x:Name="firstGroupBox"
      Margin="5"
      Header="I am a TextBlock autogenerated by WPF. Since I'm in the Header, I should be yellow.">
        <TextBlock
          Text="I'm a TextBlock declared in the content of the GroupBox. I should NOT be yellow." />      
    </GroupBox>
    <GroupBox
      x:Name="secondGroupbox"
      Margin="5"
      >
      <HeaderedContentControl.Header>      
          <TextBlock
            x:Name="notStyledTextBlock"
            Text="I'm a TextBlock declared in the header. I should be yellow since I'm in the header."
            VerticalAlignment="Center" />          
      </HeaderedContentControl.Header>
      <TextBlock
        Text="I'm declared in the content so I should not be yellow." />
    </GroupBox>
  </StackPanel>
</Window>

试一试可以看到,第二个TextBlocknamed的背景不是黄色的,这意味着没有应用in的resources中定义的样式。notStyledTextBlockGroupBoxContentPresenterControlTemplate

令人惊讶的是,由 WPF 自动生成的作为第一个标题文本容器的文本GroupBox具有黄色背景。

我该怎么做才能使我的风格应用于notStyledTextBlock TextBlock

4

1 回答 1

2

我也遇到了 GroupBoxes 和 ContentPresenter 的问题。我已经发布了一个问题,因为没有给出答案,所以我对自己进行了一些调查。看看这个答案,可能是同一个问题(附加信息:我没有发布我真正的问题代码,而是一个可用于重现的简化示例)。

于 2010-09-09T12:31:30.067 回答