C# 使用word wrap将整个url保存在textblock中

C# 使用word wrap将整个url保存在textblock中,c#,.net,wpf,textblock,C#,.net,Wpf,Textblock,我有一个非常简单的固定高度和宽度的文本块,其中包含一些内容,包括url。问题是,如果它遇到一个无法在行的其余部分完全容纳的url,那么它会将url从以下位置拆分:// “看起来很难看。我只是希望它粘在一起,如果它不能容纳在一行中,那么它应该将整个url移动到下一行 样本代码和图像是附加的 <Grid> <TextBlock Width="200" Height="50" Background="Yellow" TextWrapping="WrapWithOverflow

我有一个非常简单的固定高度和宽度的文本块,其中包含一些内容,包括url。问题是,如果它遇到一个无法在行的其余部分完全容纳的url,那么它会将url从以下位置拆分:// “看起来很难看。我只是希望它粘在一起,如果它不能容纳在一行中,那么它应该将整个url移动到下一行

样本代码和图像是附加的

 <Grid>
   <TextBlock Width="200" Height="50" Background="Yellow" TextWrapping="WrapWithOverflow">
       <Run Text="This is supposed to test url http://google.com"></Run>
   </TextBlock>
</Grid>

请记住,文本和url都不是预定义的,它是一个可变值。

请尝试以下操作:


使用文本中的break标记在新行中打印URL,但不带断行

您可能会尝试类似的方法,这可能不是一个完整的解决方案,但可能会引导您完成所需的工作

尝试测量格式化文本的宽度,如果格式化文本的宽度大于文本块的宽度,则肯定有一个换行。为此,您可能希望使用FormattedText类,如下所示:

var formattedText = new FormattedText(
                [Your Text from the TextBlock Here],
                CultureInfo.CurrentCulture,
                FlowDirection.LeftToRight,
                new Typeface([YourTextBlock].FontFamily, [YourTextBlock].FontStyle, [YourTextBlock].FontWeight, [YourTextBlock].FontStretch),
                [YourTextBlock].FontSize,
                Brushes.Black);
然后,formattedText.Width将为您提供显示文本的宽度。 将其与文本块对象的宽度进行比较,如果格式化文本较大,则使用简单的正则表达式搜索在http://之前插入一个换行符


注意:您的TextBlock没有直接的文本,它有Run元素,这意味着它可以进一步格式化,尽管您发布的代码没有显示。如果跑步有格式,可能会变得更复杂一些,如果跑步没有格式,我宁愿放弃它。

你的答案应该包含实现问题要求的代码。
TextWrapping
将从找到边界的地方换行。试试这个
,否则它也会起作用--
这应该是用来测试url的http://google.com“
这是您在此文本框中显示的固定URL,还是URL和附带的文本来自某些用户输入/数据库等。?如果它是一个固定值,我想Abin Mathew的建议可能足够好,否则您可能需要分析文本并添加换行符。@ArifEqbal这不是一个固定的url。@MegaMind,在这种情况下,请使用正则表达式来标识url(),并在此之前插入换行符。现在,如果您想要更复杂的内容,例如,不要盲目地插入换行符,除非URL实际上分成两行或类似的逻辑,否则这需要在逻辑方面付出更多的努力。