基于以下代码:
<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”,结果相同。
答案 0 :(得分:2)
我对ContentPresenter有一个奇怪的问题。我记得我已经分析了问题的根源,并且发现它是设计的 - 可能你在这里遇到了同样的问题。
看看this post,也许对你有帮助。
答案 1 :(得分:0)
我认为内容演示者呈现的文本是GroupBox.Header,您可能只是在那里添加另一个不属于Group Box的TextBox。
在您的第一个代码块中,添加以下行,看看是否有效:
<GroupBox.Header>Test</GroupBox.Header>
HTH,
Berryl