gpt4 book ai didi

c# - XAML 将文本 block 文本转换为内联

转载 作者:行者123 更新时间:2023-11-30 14:08:41 25 4
gpt4 key购买 nike

我想在 UWP 项目中的 TextBlock 上设置这种文本:

"<Bold>" + variable + "</Bold>"

但是设置为Text值不考虑<Bold>标签。

所以我搜索了如何做,唯一的答案是“创建内联并将其添加到您的文本 block ”。但我不想在我的 View 模型上这样做。

所以我正在寻找一个转换器来用内联集合替换我的文本属性以在我的 textBlock 上设置。我找到了一些示例 ( https://social.msdn.microsoft.com/Forums/en-US/1a1af975-e186-4167-b1c9-cc86afcdd93a/how-to-show-text-in-textblock-as-rich-text-format?forum=wpf),但不适用于通用 Windows 应用程序 (UWP)。

我试过了但是我有一个错误(无法将绑定(bind)转换为字符串):

<TextBlock  x:Name="newsArticleSections"
Tag="{Binding RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource TextToRunConverter}, ConverterParameter={Binding ArticleSections}}"/>

这是我的转换器:

public object Convert(object value, Type targetType, object parameter, string language)
{
TextBlock textblock = value as TextBlock;

textblock.ClearValue(TextBlock.TextProperty);
Run run = new Run();
run.Text = (string)parameter;
textblock.Inlines.Add(run);
return null;
}

这只是我探索的方式,但暂时没有结果。有人有其他想法吗?

最佳答案

@devuxer 的回答是个好主意,但仅适用于 WPF 项目。所以我用它来制作 UWP 解决方案并且它有效:

创建一个 Formatter 类:

public class TextBlockFormatter
{
public static readonly DependencyProperty FormattedTextProperty = DependencyProperty.RegisterAttached(
"FormattedText",
typeof(string),
typeof(TextBlockFormatter),
new PropertyMetadata(null, FormattedTextPropertyChanged));

public static void SetFormattedText(DependencyObject textBlock, string value)
{
textBlock.SetValue(FormattedTextProperty, value);
}

public static string GetFormattedText(DependencyObject textBlock)
{
return (string)textBlock.GetValue(FormattedTextProperty);
}

private static void FormattedTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
// Clear current textBlock
TextBlock textBlock = d as TextBlock;
textBlock.ClearValue(TextBlock.TextProperty);
textBlock.Inlines.Clear();
// Create new formatted text
string formattedText = (string)e.NewValue ?? string.Empty;
string @namespace = "http://schemas.microsoft.com/winfx/2006/xaml/presentation";
formattedText = $@"<Span xml:space=""preserve"" xmlns=""{@namespace}"">{formattedText}</Span>";
// Inject to inlines
var result = (Span)XamlReader.Load(formattedText);
textBlock.Inlines.Add(result);
}

}

并将此引用添加到您的 XAML 文件:

xmlns:helpers="using:MyProject.Helpers"

要使用格式化程序,只需添加一个 TextBlock 并在 FormattedText 上声明绑定(bind),如下所示:

<TextBlock  x:Name="textBlock" helpers:TextBlockFormatter.FormattedText="{Binding Content}">

关于c# - XAML 将文本 block 文本转换为内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34095182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com