c#-仅使用XAML中的DataBinding在TextBlock中丰富文本格式
作者:互联网
我正在尝试使用数据绑定格式化推文.我需要做的是根据推文的内容类型拆分推文的“文本”值.
text = "This is a Tweet with a hyperlink http://www.mysite.com"
我需要在文本值的http:// …部分添加一些颜色格式.
这是关键,我只想使用XAML数据绑定来做到这一点.
<TextBlock x:Name="Tweet1" FontWeight="Bold" Height="207.236"
LineHeight="55" TextAlignment="Left" TextWrapping="Wrap"
Width="1614.646" Text="{Binding XPath=/statuses/status[2]/text}"
FontSize="56" FontFamily="Segoe Book"
Foreground="{DynamicResource TextColor-Gray}" />
//需要最终看起来像
<TextBlock x:Name="Tweet1" FontWeight="Bold" ... FontSize="56" FontFamily="Segoe Book">
<Run Foreground="{DynamicResource TextColor-Gray}" >This is a Tweet with a hyperlink</Run>
<Run Foreground="{DynamicResource TextColor-Pink}" >http://www.mysite.com</Run>
</TextBlock>
这是一个我可以用来拆分文本值的正则表达式,但是我尝试使用严格的DataBinding.
Regex regUrl = new Regex(@"/http:\/\/\S+/g");
有什么建议吗?
解决方法:
我正在使用MVVMLight.我要做的是捕获TextBlock的Loaded事件,并将其路由到“转换器”.
using System.Collections.Generic;
using System.Windows.Documents;
using System.Windows.Controls;
using GalaSoft.MvvmLight.Command;
namespace Converters
{
public class MyInlineConverter
{
public RelayCommand<TextBlock> ConvertTextToInlinesCommand { get; private set; }
public MyInlineConverter()
{
ConvertTextToInlinesCommand = new RelayCommand<TextBlock>(textBlock => convertTextToInlines(textBlock));
}
private static void convertTextToInlines(TextBlock textBlock)
{
foreach (Run run in textToInlines(textBlock.Text))
textBlock.Inlines.Add(run);
}
private static IEnumerable<Run> textToInlines(string text)
{
List<Run> retval = new List<Run>();
// Perform your conversion here.
return retval;
}
}
}
如果将此类的实例添加到静态资源中,则如下所示:
<converters:TMTInlineConverter x:Key="InlineConverter" />
然后您可以按以下方式从TextBlock调用转换器:
<TextBlock Text="{Binding MyPath}" TextWrapping="Wrap">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<cmdex:EventToCommand Command="{Binding Source={StaticResource InlineConverter}, Path=ConvertTextToInlinesCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
抱歉,如果您不使用MVVMLight.如果您不是,我将把翻译留给读者练习.
标签:textblock,wpf,c 来源: https://codeday.me/bug/20191209/2095987.html