2012-05-05 32 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> 

Hintbody是用户控制的依赖项属性。我可以使用控制在其他地方细如:

<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的用户控件中使用ContentPresenter而不是TextBlock。这会给你现在和将来可以做的更大的灵活性。

<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属性的类型更改为对象。那么你可以这样做:

<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> 
相关问题