开发者

Apply a style to TextBlocks within a ContentPresenter in Silverlight

If I have the following style defined:

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

Then when I have a ContentPresenter data bound to a string, in WPF I can get it to style the text as required with the following XAML:

<ContentPresenter Content="{Binding Pro开发者_如何学Goblem}">
    <ContentPresenter.Resources>
        <Style TargetType="TextBlock" BasedOn="{StaticResource ProblemStyle}" />
    </ContentPresenter.Resources>
</ContentPresenter>

However, in Silverlight, this doesn't work. Is there a way that works for both?


Use the TextElement Attached property. You will not be able to set a style, but most of the properties that effects the Textblock are there..

<ContentPresenter x:Name="ContentPresenter"
                              ContentSource="Header"
                              HorizontalAlignment="Left"
                              TextElement.FontFamily="Segoe UI"
                              TextElement.FontSize="12"
                              TextElement.FontWeight="Bold"
                              TextElement.Foreground="White"
                              RecognizesAccessKey="True" />


First: Make sure that your style "ProblemStyle" is being loaded before the application tries to render the ContentPresenter. In Silverlight, the order the styles are defined makes a difference, and if it has not been loaded first then it may not be reading anything.

Ok, I am going to run on some assumptions here, the first one being that you are using a ContentControl to display something and that the ContentPresenter is inside of this control.

But why not create a Style for the ContentControl?

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

Then your ContentControl would have the Style set to the StaticResource of "ProblemStyle".

Since by default the template of a ContentControl has the ContentPresenter - or you can define the ContentPresenter template in the style as well:

<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>

The template there is just as a placeholder to give an idea of where it would/could be located.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜