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