2011-01-19 2 views
2

На основе следующего кода:Как изменить свойства 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» с тем же результатом.

ответ

2

У меня была странная проблема с ContentPresenter. Я помню, что я проанализировал источник проблемы и выяснил, что это было по дизайну. Возможно, у вас есть одна и та же проблема.

Посмотрите на this post, может быть, это поможет вам.

+0

Вроде бы то же самое точное поведение. Я исследую смертоносного. Пока я буду рассматривать этот anwser как «По дизайну». – tbolon

0

В своем первом блоке кода, добавьте строку ниже и посмотреть, если это работает:

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

HTH,
Berryl

+0

Нет, извините, что это неправильно: отображение текста в заголовке ничего не меняет – tbolon