【问题标题】:radgridview change color of text between {}radgridview 在 {} 之间更改文本颜色
【发布时间】:2014-03-10 09:08:38
【问题描述】:

我正在使用 RadGridView 在列中显示一些字符串数据。我正在使用数据绑定。我的一些文本字符串的部分文本用 {} 括起来,我想以不同的颜色显示此文本。

在网上环顾四周,我发现我可以更改文本块中文本的文本颜色,但我无法将其应用于数据绑定数据网格列。

任何人都可以建议这是否可能。

---编辑---

这里是我定义数据列的 xaml:

<telerik:GridViewDataColumn x:Name="colMasterValue" Header="Localise - Master Value" DataMemberBinding="{Binding MasterValue}" ShowDistinctFilters="False" IsReadOnly="True"/>

显示如下:

所以我想要 {Customer.Panel.field} 以不同的颜色显示。

【问题讨论】:

  • 已编辑并添加代码...

标签: c# wpf datagrid telerik


【解决方案1】:

让我们尝试下一个解决方案。

  1. 将使用可以分隔常规字符和“{”或“}”的自定义 TextBlock。
  2. 让我们添加替换机制,可以用修饰文本替换原始文本。除了“{”或“}”之外的所有文本都以某种方式着色。

这是 xaml 代码:

                <telerik:GridViewDataColumn DataMemberBinding="{Binding Path=Text}"
                                        Header="HeaderName"
                                        IsFilterable="False" IsReorderable="False">
                <telerik:GridViewDataColumn.CellTemplate>
                    <DataTemplate DataType="flowConfiguration:SomeDataType">
                        <modules:MyTextBlock Text="{Binding Text, 
                                UpdateSourceTrigger=PropertyChanged}"/>
                    </DataTemplate>
                </telerik:GridViewDataColumn.CellTemplate>

这是 MyTextBlock 代码

public class MyTextBlock:TextBlock
{
    private DependencyPropertyDescriptor _descriptor;
    private bool _isUpdating;

    public MyTextBlock()
    {
        this.Unloaded += OnUnloaded;
        _descriptor = DependencyPropertyDescriptor.FromProperty(TextProperty, typeof(TextBlock));
        _descriptor.AddValueChanged(this, OnValueChanged);
    }


    private void OnValueChanged(object sender, EventArgs eventArgs)
    {
        if(_isUpdating) return;
        _isUpdating = true;
        var text = Text;
        if(string.IsNullOrEmpty(text)) return;

        Inlines.Clear();
        UpdateInlines(text);
        _isUpdating = false;
    }

    private void UpdateInlines(string text)
    {
        //text = @"{Customer.Panel.field}";
        var runs = new List<Run>();
        var sb = new StringBuilder();
        foreach (var current in text)
        {
            if (current.Equals('}') || current.Equals('{'))
            {
                if (sb.Length == 0)
                {
                    runs.Add(new Run
                    {
                        Text = current.ToString()
                    });
                }
                else
                {
                    runs.Add(new Run
                    {
                        Text = sb.ToString(),
                        Foreground = Brushes.Red
                    });
                    runs.Add(new Run
                    {
                        Text = current.ToString()
                    });
                    sb.Clear();
                }
            }
            else
            {
                sb.Append(current);
            }
        }
        if(sb.Length > 0)
            runs.Add(new Run{Text = sb.ToString(), Foreground = Brushes.Red});
        runs.ForEach(run => 
            Inlines.Add(run));
    }


    private void OnUnloaded(object sender, RoutedEventArgs routedEventArgs)
    {
        this.Unloaded -= OnUnloaded;
        _descriptor.RemoveValueChanged(this, OnValueChanged);
    }


}

问候。

【讨论】:

    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多