2013-05-28 66 views
1

我试图让多个TextBlock小号如何格式化TextBlock中的文本?

组成一个单独的文字块 - 目标

例如,我想实现像下面的一行:

  • “我在列表框中读取此行,注意多个文本格式

我试图做的方法是

<StcakPanel Orientation="Horizontal" Width="400" > 

    <TextBlock Text="I read this line in a " TextWrapping="Wrap" /> 
    <TextBlock Text="ListBox" FontStyle="Italic" TextWrapping="Wrap"/> 
    <TextBlock Text=", notice the multiple " TextWrapping="Wrap" /> 
    <TextBlock Text="text formatting" FontWeight="Bold" TextWrapping="Wrap"/> 

<StcakPanel> 

- 问题

的文本不适合在StackPanel中,尽管设置TextWrapping为的TextBlocks和宽度的StackPanel的。

我想在运行时生成此代码。我不知道我需要格式化多少个单词。

显示带有高亮显示的搜索关键字的SearchResults的种类。

- 问题

如何用上述目标使用的StackPanel或别的东西来实现要么?有以下限制。

  • 文本长度未知
  • 在StackPanel中的TextBlocks的数量是未知
  • 宽度和高度是未知

非常感谢

回答

2

你应该使用一个<TextBlock>其中可以包含多个可以各自具有格式的<Run>。如果要插入换行符,则可以使用<Linebreak />控件。

<StackPanel Orientation="Horizontal" Width="400" > 
    <TextBlock> 
     <Run Text="I read this line in a" /> 
     <Run Text="ListBox" FontStyle="Italic" /> 
     <Run Text=", notice the multiple" /> 
     <Run Text="text formatting" FontWeight="Bold" /> 
    </TextBlock> 
<StackPanel> 

在这一点上你可能甚至不需要<StackPanel>除非你将有多个<TextBlocks>堆叠在另一个之上。

看到这个职位的详细信息和示例:http://www.danderson.me/posts/working-with-the-wpf-textblock-control/


给TextBlock中的数据绑定多个运行,看到这样的回答:Databinding TextBlock Runs in Silverlight/WP7

+0

我怎样才能做到这一点在运行时?我可以在运行时使用多个RUN吗? – wafers

+0

您可以在运行时插入Runs作为TextBlock的子项。看看我的编辑如何做到这一点,或者只是用类似于myTextBlock.Children.Add(new Run())的代码手动添加控件;' – qJake

+1

谢谢SpikeX! – wafers