2012-05-05 2 views
0

단어 줄 바꿈이있는 텍스트 블록이 포함 된 사용자 정의 컨트롤이 있습니다.사용자 정의 컨트롤 안에있는 텍스트 블록 텍스트 설정

<UserControl> 
    <StackPanel> 
    <TextBlock MaxWidth="500" 
       Margin="2" 
       Text="{Binding HintHeader}" 
       TextWrapping="Wrap" /> 

    <TextBlock MaxWidth="500" 
       Margin="2" 
       Text="{Binding HintBody}" 
       TextWrapping="Wrap" /> 
    </StackPanel> 
</UserControl> 

힌트 바디는 사용자 정의 컨트롤의 종속성 속성입니다. 나는 다른 곳에서 잘 컨트롤을 사용할 수 있습니다 :

<cntrls:HintButton x:Name="hint" 
        Width="24" 
        Height="24" 
        Margin="85,68,0,0" 
        HintHeader="This is an header" 
        HintBody="This is an hint"/> 

모든 것이 잘 작동합니다. 하지만 텍스트 블록 (HintBody)에 여러 줄 텍스트를 설정해야합니다. 코드 숨김에서 "\ r \ n"을 사용하여 Hintbody 속성을 설정하면 문제가 없습니다. 그러나 저는 XAML에서 같은 것을 설정하고 싶습니다. 뭔가.

<cntrls:HintButton x:Name="hint" 
         Width="24" 
         Height="24" 
         Margin="85,68,0,0" 
         HintHeader="Hint Header" > 
     <cntrls:HintButton.HintBody> 
     This is a multiline hint body. 
     <LineBreak /> 
     This is a multiline hint body. 
     </cntrls:HintButton.HintBody>  
    </cntrls:HintButton> 

답변

0

HintBody에 대한 사용자 정의 컨트롤 내에서 TextBlock 대신 ContentPresenter를 사용하는 것이 좋습니다. 그러면 현재와 미래에 할 수있는 것에 더 큰 유연성을 줄 수 있습니다.

<UserControl> 
    <StackPanel> 
    <TextBlock MaxWidth="500" 
      Margin="2" 
      Text="{Binding HintHeader}" 
      TextWrapping="Wrap" /> 

    <ContentPresenter MaxWidth="500" 
      Margin="2" 
      Text="{Binding HintBody}" 
      TextWrapping="Wrap" /> 
    </StackPanel> 
</UserControl> 

HintBody 속성의 유형을 object로 변경해야합니다. 그런 다음 할 수 있습니다.

<cntrls:HintButton x:Name="hint" 
        Width="24" 
        Height="24" 
        Margin="85,68,0,0" 
        HintHeader="Hint Header" > 
    <cntrls:HintButton.HintBody> 
    <TextBlock> 
     <Run Text="This is a line."/> 
     <LineBreak/> 
     <Run Text="This is another line"/> 
    </TextBlock>  
    </cntrls:HintButton.HintBody> 
</cntrls:HintButton> 
관련 문제