Как изменить свойства TextBlock по умолчанию для ContentPresenter в шаблоне - PullRequest
2 голосов
/ 19 января 2011

На основании следующего кода:

<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» с тем же результатом.

Ответы [ 2 ]

2 голосов
/ 19 января 2011

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

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

0 голосов
/ 19 января 2011

I думаю текст, который представляет докладчик контента, это GroupBox.Header, и вы можете просто прикрепить туда еще один TextBox, который не является частью Group Box.

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

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

HTH,
Berryl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...