13

如果我将一段文本分配给 a 的Content属性,则在渲染时会生成ContentPresenter一个TextBlock控件ContentPresenter来包含该文本。

如果我创建一个适用于TextBlock属性的样式并将其分配给 that ContentPresenter,则 似乎不适用于隐式生成TextBlock的 s。

<Style x:Key="SampleStyle">
  <Setter Property="TextBlock.TextWrapping" Value="Wrap"/>
</Style>

<ContentPresenter Content="This is a Test piece of text." Style="{StaticResource SampleStyle}"/>

有没有办法将此样式成功应用于自动生成TextBlock的 s 而不是将其应用于所有TextBlocks (例如,将样式声明为TargetType="TextBlock"no Key)?

4

2 回答 2

39

You can do this...

<Window.Resources>
    <ResourceDictionary>
        <Style TargetType="{x:Type TextBlock}" x:Key="WrappingStyle">
            <Setter Property="TextWrapping" Value="Wrap"/>
        </Style>
    </ResourceDictionary>
</Window.Resources>

...then where you define your ContentPresenter...

<ContentPresenter Content="This text is going to wrap...">
            <ContentPresenter.Resources>
                <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource WrappingStyle}"/>
            </ContentPresenter.Resources>
</ContentPresenter>

The TargetType is set since as you know the ContentPresenter will not always hold a TextBlock in it.

于 2010-10-19T16:23:43.177 回答
9

如果您没有在其他地方使用该样式,则可以将其直接应用于内容演示者:

<ContentPresenter.Resources>
    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="TextWrapping" Value="Wrap"/>
    </Style>
</ContentPresenter.Resources>
于 2014-07-21T09:31:16.327 回答