Стиль WPF 4 ContentPresenter TextWrapping не применяется к неявно созданному TextBlock
Если я присваиваю часть текста свойству Content
объекта ContentPresenter
, элемент TextBlock
создается ContentPresenter
во время рендеринга, чтобы содержать этот текст.
Если я создаю стиль, который применяется к свойствам TextBlock
и назначает его этому 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
, чтобы применить его ко всем TextBlock
(например, объявить стиль как TargetType="TextBlock"
без Key
)?
Ответы
Ответ 1
Вы можете сделать это...
<Window.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type TextBlock}" x:Key="WrappingStyle">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
</ResourceDictionary>
</Window.Resources>
... тогда, когда вы определяете свой ContentPresenter
...
<ContentPresenter Content="This text is going to wrap...">
<ContentPresenter.Resources>
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource WrappingStyle}"/>
</ContentPresenter.Resources>
</ContentPresenter>
TargetType
устанавливается, поскольку, как вы знаете, ContentPresenter
не всегда будет содержать TextBlock
в нем.
Ответ 2
Если вы не используете стиль в другом месте, вы можете применить его непосредственно к ведущему контента:
<ContentPresenter.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
</ContentPresenter.Resources>