На основании следующего кода:
<GroupBox>
<GroupBox.Template>
<ControlTemplate TargetType="{x:Type GroupBox}">
<ContentPresenter TextElement.FontSize="28" />
</ControlTemplate>
</GroupBox.Template>
<TextBlock>Test</TextBlock>
</GroupBox>
Я ожидал, что «Test» будет отображаться с FontSize = 28. Но вместо этого он использует размер по умолчанию.
Если я удалю TextBlock следующим образом:
<GroupBox>
<GroupBox.Template>
<ControlTemplate TargetType="{x:Type GroupBox}">
<ContentPresenter TextElement.FontSize="28" />
</ControlTemplate>
</GroupBox.Template>
Test
</GroupBox>
Текст теперь отображается с 28 как FontSize.
Не следует ли наследовать значение свойства при использовании TextBlock?
Этот другой вопрос Как изменить FontFamily в ContentPresenter? не помогает, поскольку он работает только для содержимого по умолчанию.
Этот вопрос также: Как изменить FontFamily в ContentPresenter? .
И то и другое работает, если вы используете обработчик содержимого по умолчанию, но не удается при создании текстового блока вручную.
Редактировать: как показано в этот другой вопрос , я пытался просто с помощью 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» с тем же результатом.