在水平stackpanel或wrappanel中很好地包装文本?

时间:2014-02-05 01:45:43

标签: xaml windows-phone-8 stackpanel textwrapping wrappanel

我已经看过其他一些关于此的帖子,但没有看到任何可以解决我的问题。基本上,我需要在StackpanelWrappanel中很好地包含一些文本(粗体和非粗体)。这是一个视觉:

enter image description here

我需要你看到的两个TextBlocks的组合。我有第一个加粗TextBlock,其中包含“标题:”,然后在同一行,我需要下一个TextBlock,它可能包含也可能不包装。如果它确实换行,我需要顶行留在顶行然后换行,好像它都是一个TextBlock。这是我需要的“油漆”视觉效果:

enter image description here

这是我到目前为止的代码:

<toolkit:WrapPanel Orientation="Horizontal">
   <TextBlock Text="Title: " FontWeight="Bold"/>
   <TextBlock TextWrapping="Wrap" Text="More text goes here " />
</toolkit:WrapPanel>

<toolkit:WrapPanel Orientation="Horizontal">
   <TextBlock Text="Title: " FontWeight="Bold"/>
   <TextBlock TextWrapping="Wrap" Text="More text goes here and I want it to wrap lines and go underneath the title but I can't get it to to do that. :( " />
</toolkit:WrapPanel>

现在,我反对在一个 TextBlock中完成此操作(如果可能)。我知道使用TextBlock.Inlines我可以添加Run粗体文本,然后添加另一个常规文本。问题是Inlines cannot be bound使用MVVM(我在本演示中没有使用,但将在最终代码中使用)。

无论解决方案是什么,我都需要能够从代码隐藏中设置TextBlock的值,以便我知道它可以用MVVM完成。

有谁知道实现这个目标的方法?

4 个答案:

答案 0 :(得分:3)

对于每种字体样式,使用RichTextBox控件和不同的运行。

<RichTextBox>
    <Paragraph>
        <Run FontWeight="Bold">Title:</Run>
        <Run>More text goes here and I want it to wrap lines and go underneath the title but I can't get it to to do that. :(</Run>
    </Paragraph>
</RichTextBox>

您可以将Run元素的Text属性绑定到数据上下文,例如:

    <RichTextBox>
        <Paragraph>
            <Run FontWeight="Bold"
                 Text="{Binding Header}"></Run>
            <Run Text="{Binding Text}"></Run>
        </Paragraph>
    </RichTextBox>

答案 1 :(得分:0)

这对你有帮助:

<toolkit:WrapPanel Orientation="Horizontal">
   <TextBlock>       
       <Run FontWeight="Bold" Text="{Binding Header}"></Run>     
        <Run Text="{Binding Text}"></Run>    
    </TextBlock>
</toolkit:WrapPanel>

答案 2 :(得分:0)

修复StackPanel的宽度属性。这可能对你有帮助。问题是,如果您没有将宽度属性设置为自动宽度。

<StackPanel Orientation="Horizontal" Width="400">
   <TextBlock Text="Title: " FontWeight="Bold"/>
   <TextBlock TextWrapping="Wrap" Text="More text goes here " />
</StackPanel >

<StackPanel  Orientation="Horizontal" Width="400">
   <TextBlock Text="Title: " FontWeight="Bold"/>
   <TextBlock TextWrapping="Wrap" Text="More text goes here and I want it to wrap lines and go underneath the title but I can't get it to to do that. :( " />
</StackPanel >

答案 3 :(得分:0)

您是否尝试使用此类构造?

<TextBlock>
    <TextBlock.Inlines>
        <Bold>
            <Bold.Inlines>
                <Run Text="Title: "/>
            </Bold.Inlines>
        </Bold>
        <Run Text="{Binding Text}"/>
    </TextBlock.Inlines>
</TextBlock>

如果文本块应该只绑定到一个文本块,它就像一个魅力。