如何更改模板中ContentPresenter的TextBlock默认属性

时间:2011-01-19 19:09:10

标签: wpf xaml

基于以下代码:

<GroupBox>
  <GroupBox.Template>
    <ControlTemplate TargetType="{x:Type GroupBox}">
      <ContentPresenter TextElement.FontSize="28" />
    </ControlTemplate>
  </GroupBox.Template>
  <TextBlock>Test</TextBlock>
</GroupBox>

我期待用FontSize = 28显示“Test”。但它使用默认大小。

如果我像这样删除TextBlock:

<GroupBox>
  <GroupBox.Template>
    <ControlTemplate TargetType="{x:Type GroupBox}">
      <ContentPresenter TextElement.FontSize="28" />
    </ControlTemplate>
  </GroupBox.Template>
  Test
</GroupBox>

现在显示文本,其中28为FontSize。

使用TextBlock时,不应该继承属性值吗?

另一个问题How do I Change the FontFamily on a ContentPresenter?没有帮助,因为它也适用于默认内容。

这个问题也是:How do I Change the FontFamily on a ContentPresenter?

当您使用默认内容处理程序时,两者都有效,但在手动创建文本块时会失败。

编辑:如this other question所示,我尝试过使用ContentControl:

<StackPanel>
   <StackPanel.Resources>
      <ControlTemplate x:Key="UsingBorderTemplate" TargetType="{x:Type ContentControl}">
         <Border BorderBrush="Red" BorderThickness="1" TextElement.FontFamily="Courier New" Margin="5">
            <ContentPresenter/>
         </Border>
      </ControlTemplate>
      <ControlTemplate x:Key="MyTemplate" TargetType="{x:Type ContentControl}">
         <ContentPresenter TextElement.FontFamily="Courier New" Margin="5" />
      </ControlTemplate>
   </StackPanel.Resources>
   <ContentControl Template="{StaticResource MyTemplate}">
        I'm courier new!
   </ContentControl>
   <ContentControl Template="{StaticResource MyTemplate}">
       <TextBlock>I'm default!</TextBlock>
   </ContentControl>
</StackPanel>

您可以将模板从“MyTemplate”更改为“UsingBorderTemplate”,结果相同。

2 个答案:

答案 0 :(得分:2)

我对ContentPresenter有一个奇怪的问题。我记得我已经分析了问题的根源,并且发现它是设计的 - 可能你在这里遇到了同样的问题。

看看this post,也许对你有帮助。

答案 1 :(得分:0)

认为内容演示者呈现的文本是GroupBox.Header,您可能只是在那里添加另一个不属于Group Box的TextBox。

在您的第一个代码块中,添加以下行,看看是否有效:

<GroupBox.Header>Test</GroupBox.Header> 

HTH,
Berryl