我正在使用RadGridView在列中显示一些字符串数据。我正在使用数据绑定。我的一些文本字符串的部分文本被{}包围,我想以不同的颜色显示该文本。
从网上四处查看我发现我可以在文本块中更改文本的文本颜色,但我无法将其应用于数据绑定数据网格列。
有人可以建议这是否可行。
--- --- EDIT
Heres xaml我定义datacolumn:
<telerik:GridViewDataColumn x:Name="colMasterValue" Header="Localise - Master Value" DataMemberBinding="{Binding MasterValue}" ShowDistinctFilters="False" IsReadOnly="True"/>
继承人的展示:
所以我想要的是{Customer.Panel.field}以不同的颜色显示。
答案 0 :(得分:0)
让我们尝试下一个解决方案。
以下是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);
}
}
问候。