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

1 回答 1

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>
于 2012-05-05T06:48:24.470 回答