Примените стиль к TextBlocks в ContentPresenter в Silverlight - PullRequest
4 голосов
/ 16 сентября 2010

Если у меня определен следующий стиль:

<UserControl.Resources>
    <Style TargetType="TextBlock" x:Key="ProblemStyle">
        <Setter Property="FontSize" Value="40"/>
        <Setter Property="FontWeight" Value="Bold"/>
    </Style>
</UserControl.Resources>

Затем, когда у меня есть данные ContentPresenter, связанные со строкой, в WPF я могу заставить их стилизовать текст в соответствии со следующим XAML:

<ContentPresenter Content="{Binding Problem}">
    <ContentPresenter.Resources>
        <Style TargetType="TextBlock" BasedOn="{StaticResource ProblemStyle}" />
    </ContentPresenter.Resources>
</ContentPresenter>

Однако в Silverlight это не работает. Есть ли способ, который работает для обоих?

Ответы [ 2 ]

6 голосов
/ 26 августа 2015

Используйте свойство TextElement Attached.Вы не сможете установить стиль, но большинство свойств, влияющих на текстовый блок, присутствуют ..

<ContentPresenter x:Name="ContentPresenter"
                              ContentSource="Header"
                              HorizontalAlignment="Left"
                              TextElement.FontFamily="Segoe UI"
                              TextElement.FontSize="12"
                              TextElement.FontWeight="Bold"
                              TextElement.Foreground="White"
                              RecognizesAccessKey="True" />
0 голосов
/ 16 декабря 2013

Во-первых: Убедитесь, что ваш стиль «ProblemStyle» загружается до того, как приложение попытается отобразить ContentPresenter. В Silverlight порядок, в котором определяются стили, имеет значение, и, если он не был загружен первым, он может ничего не читать.

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

Но почему бы не создать стиль для ContentControl?

<Style x:key="ProblemStyle" TargetType="ContentControl">
  <Setter Property="FontSize" Value="40"/>
  <Setter Property="FontWeight" Value="Bold"/>
</Style>

Тогда ваш ContentControl будет иметь для Style установленный StaticResource «ProblemStyle».

Поскольку по умолчанию шаблон ContentControl имеет ContentPresenter - или вы можете определить шаблон ContentPresenter также в стиле:

<Style x:key="ProblemStyle" TargetType="ContentControl">
  <Setter Property="FontSize" Value="40"/>
  <Setter Property="FontWeight" Value="Bold"/>
  <Setter Property="Template">
    <Setter.Value>
       <ControlTemplate TargetType="ContentControl">
          <Border>
             <ContentPresenter Content="{TemplateBinding Content}"/>
          </Border>
       </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Шаблон там как заполнитель, чтобы дать представление о том, где он будет / может быть расположен.

...