WPF GroupBox ControlTemplate:如何仅将样式应用于标题中的元素?

时间:2010-09-09 12:17:15

标签: wpf header styles controltemplate groupbox

我正在尝试为ControlTemplate制作一个GroupBox,以便TextBlockHeader声明其BackgroundTextBlock应设置为ContentPresenter黄色。

问题是,虽然我在Header TextBlock中为<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> 定义了TextBlock的样式,但除了那些自动生成的notStyledTextBlock之外,它不会被应用由WPF。

以下是代码:

GroupBox

正如您所看到的那样,第二个ContentPresenter中名为ControlTemplate的{​​{1}}的背景不是黄色,这意味着GroupBox资源中定义的样式<{1}}中的1}}未应用。

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

我该怎样做才能将我的风格应用于TextBlock {{1}}?

1 个答案:

答案 0 :(得分:2)

我也遇到了GroupBoxes和ContentPresenter的问题。我发布了一个问题,因为没有回答,我调查了一下自己。看看this答案,也许是同一个问题(附加信息:我没有发布我的真实问题代码,但是可以用来复制的简化示例)。