2010-10-19 11 views
8

Gdybym przypisać kawałek tekstu do majątku ContentPresenterContent, kontrola TextBlock jest generowany przez ContentPresenter na czas renderowania, aby zawierał ten tekst.WPF 4 style ContentPresenter TextWrapping nie stosuje się do implicitedly generowane TextBlock

Jeśli utworzę styl odnoszący się do właściwości TextBlock i przypisze go do tego ContentPresenter, wydaje się, że nie ma zastosowania do niejawnie wygenerowanych 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}"/> 

Czy istnieje sposób, aby zastosować ten styl z powodzeniem na automatycznie wygenerowany TextBlock s krótki stosowania go do wszystkich TextBlock s (np deklarujących styl jako TargetType="TextBlock" bez Key)?

Odpowiedz

32

Można to zrobić ...

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

... to gdzie można zdefiniować swój ContentPresenter ...

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

TargetType jest ustawiony ponieważ jak wiesz, nie zawsze będzie ContentPresenter trzymaj w nim TextBlock.

+0

Dziękuję mch – Sayka

5

Jeśli nie używasz stylu gdzie indziej, można zastosować go bezpośrednio do zawartości prezentera:

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