gpt4 book ai didi

c# - 动态格式化的 TextBlock

转载 作者:行者123 更新时间:2023-11-30 15:31:03 24 4
gpt4 key购买 nike

我想动态地格式化 TextBlock 中的特定单词,因为它绑定(bind)到我的对象。我正在考虑使用 Converter 但使用以下解决方案仅将标签直接添加到文本(而不是显示它的格式)。

public class TextBlockFormatter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
string regexp = @"\p{L}+#\d{4}";

if (value != null) {
return Regex.Replace(value as string, regexp, m => string.Format("<Bold>{0}</Bold>", m.Value));
}

return null;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
return null;
}
}

最佳答案

This is not an attempt to answer this question... it is a demonstration in response to a question in the question comments.

是的@Blam,您可以格式化TextBlock中的单个单词,甚至字符...您需要使用Run (或者您可以Run 替换为 TextBlock) 类。无论哪种方式,您还可以将数据绑定(bind)到其中任何一个的 Text 属性:

enter image description here

<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
<Run Text="This" FontWeight="Bold" Foreground="Red" />
<Run Text="text" FontSize="18" />
<Run Text="is" FontStyle="Italic" />
<Run Text="in" FontWeight="SemiBold" Background="LightGreen" />
<Run Text="one" FontFamily="Candara" FontSize="20" />
<Run Text="TextBlock" FontWeight="Bold" Foreground="Blue" />
</TextBlock>

更新>>>

现在关于这个问题,我认为可以在 DataTemplate 中使用这些 Run 元素,并从数据中生成它们......这种情况必须是具有(显然)Text 属性的类,而且还必须是格式化属性,您可以使用这些属性将数据绑定(bind)到 Run 样式属性。

很尴尬,因为 TextBlock 没有 ItemsSource 属性,您可以将您的词类集合绑定(bind)到...也许您可以为该部分使用 Converter...在这里大声思考...我现在要停下来。


更新>>>

@KrzysztofBzowski,很遗憾,TextBlock.Inlines 属性不是 DependencyProperty,因此您无法将数据绑定(bind)到它.然而,这让我开始思考,我又进行了一次搜索,找到了 Binding text containing tags to TextBlock inlines using attached property in Silverlight for Windows Phone 7关于 Jevgeni Tsaikin 的 .NET 实验室的文章。

这需要您声明一个附加属性和一个Converter,但它看起来很有前途……试一试吧。不要担心它是针对 Silverlight 的...如果它在 Silverlight 中工作,那么它也会在 WPF 中工作。

关于c# - 动态格式化的 TextBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21165012/

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