我有多个TextBlocks,其Text通过DynamicResource插入。它们都设置为TextWrapping =" Wrap"。但是在那些文本字符串中,我有不允许拆分的单词。这些话必须作为一个整体来保持。
使用Xaml中的硬编码文本,可以通过Textblock内的TextBlock轻松解决:
<TextBlock TextWrapping="Wrap">
Example text with wrap and <TextBlock TextWrapping="NoWrap" Text=" example text without wrap"/
</TextBlock>
但是当通过DynamicResource插入Text时,此解决方案不起作用,因为文本未被解析。
如何将nowrap和wrap包含在DynamicResource文本中,而不是一个接一个地将它拆分成多个TextBlock?
PS:我现在已经创建了一个示例来演示我想要的行为(绿色)和失败的尝试(红色,橙色,黑暗)< / strong>解决它:
<StackPanel HorizontalAlignment="Center" Width="80" Orientation="Vertical">
<TextBlock TextWrapping="Wrap" Foreground="green">
bla1 bla2 bla3 bla4 <TextBlock TextWrapping="NoWrap" Text="Together(en)"/> bla5 bla6 longWordWhichShouldBreak
</TextBlock>
<TextBlock TextWrapping="Wrap" Foreground="red">
bla1 bla2 bla3 bla4 Together(en) bla5 bla6 longWordWhichShouldBreak
</TextBlock>
<TextBlock TextWrapping="Wrap" Foreground="orange">
bla1 bla2 bla3 bla4 Together(en) bla5 bla6 longWordWhichShouldBreak
</TextBlock>
<TextBlock TextWrapping="WrapWithOverflow" Foreground="DarkRed">
bla1 bla2 bla3 bla4 Together(en) bla5 bla6 longWordWhichShouldBreak
</TextBlock>
</StackPanel>
答案 0 :(得分:1)
在动态文字中使用NO-BREAK SPACE。例如:
<TextBlock TextWrapping="Wrap">
Example text with wrap and example text without wrap
</TextBlock>
您可以在需要此行为的部分中使用此字符替换空格:
Replace(" ", System.Convert.ToChar(160))
答案 1 :(得分:0)
您是否考虑使用“WrapWithOverflow
”代替“Wrap
”?
如果出现空格,这只会破坏该行。
然后,您可以设置必须与破折号一起出现的字词,例如 - '常规线和词 - 不应该 - 打破'
答案 2 :(得分:0)
您应该使用Run:
<TextBlock>
<Run Text={x:static SomeText} />
<Run Text={x:static SomeNoWrapText}
TextWrapping="NoWrap"/>
<Run Text={x:static SomeMoreText} />
</TextBlock>
答案 3 :(得分:0)
评论有点多,但也不是一个完整的答案。
让我们将您的XAML示例片段从所有隐式内容转换为完全合格的结构。
您的简化XAML,使用隐式内容属性等等:
<TextBlock TextWrapping="Wrap" Foreground="green">
bla1 bla2 bla3 bla4 <TextBlock TextWrapping="NoWrap" Text="Together(en)"/> bla5 bla6 longWordWhichShouldBreak
</TextBlock>
等效实际结构:
<TextBlock TextWrapping="Wrap" Foreground="green">
<TextBlock.Inlines>
<Run Text="bla1 bla2 bla3 bla4 "/>
<InlineUIContainer>
<InlineUIContainer.Child>
<TextBlock TextWrapping="NoWrap" Text="Together(en)"/>
</InlineUIContainer.Child>
</InlineUIContainer>
<Run Text=" bla5 bla6 longWordWhichShouldBreak"/>
</TextBlock.Inlines>
</TextBlock>
这可以让您对XAML中的内容的复杂性有所了解。只需设置Text
属性,就无法达到相同的效果。
目前我无法回答如何解决此问题,因为DynamicResource
不足以开始转换为上述结构。
您可能需要查看此问题:Data binding the TextBlock.Inlines