设置用户控件多行内的文本块文本

时间:2012-05-05 06:08:23

标签: wpf wpf-controls textblock

我有一个用户控件,其中包含带有自动换行的文本块。

<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>

1 个答案:

答案 0 :(得分: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属性的类型更改为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>