WPF使用数据绑定显示格式化的多行文本

时间:2010-02-18 17:41:09

标签: wpf data-binding text multiline formatted

我需要使用WPF数据绑定显示以下内容(值更改)。标题必须为粗体,信息行为普通文本。如果给定标题的信息不存在,我想要折叠该部分,包括标题。我更喜欢所有数据(标题和信息项)都在一个格式化的字符串中,可以在我想要的地方换行。

头1:

我的信息1

我的信息2

头2:

我的信息3

我的信息4

2 个答案:

答案 0 :(得分:4)

另一种尝试方法。使用TextBlock.Inlines。然后将模型绑定到TextBlock,并在自定义value converter中或通过自定义附加属性解析模型以填充TextBlock的内联。

以下是Attached属性的示例,该属性采用文本字符串并使每个第二个单词变为粗体:

public class RunExtender : DependencyObject
{
    public static string GetText(DependencyObject obj)
    {
        return (string)obj.GetValue(TextProperty);
    }

    public static void SetText(DependencyObject obj, string value)
    {
        obj.SetValue(TextProperty, value);
    }

    public static readonly DependencyProperty TextProperty = DependencyProperty.RegisterAttached("Text", typeof(string), typeof(RunExtender), new PropertyMetadata(string.Empty, OnBindingTextChanged));

    private static void OnBindingTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var bindingText = e.NewValue as string;
        var text = d as TextBlock;
        if (text != null)
        {
            text.Inlines.Clear();
            var words = bindingText.Split(' ');
            for (int i = 0; i < words.Length; i++)
            {
                var word = words[i];
                var inline = new Run() {Text = word + ' '};
                if (i%2 == 0)
                {
                    inline.FontWeight = FontWeights.Bold;
                }
                text.Inlines.Add(inline);
            }
        }
    }
}

这不是一个生产质量代码,它来自Silverlight演示,但你明白了。

希望这有帮助。

干杯,安瓦卡。

答案 1 :(得分:0)

如果你想以一种风格进行粗体加工,我认为最好的办法是打破你的字符串并在TextBlocks内的StackPanel内使用Expander

或者您可以使用整个字符串在RichTextBox中执行此操作,但我认为您的字符串必须包含<bold></bold>标记。