【发布时间】:2014-05-10 12:04:41
【问题描述】:
我想在 WPF 应用程序的数据网格中突出显示字符串。
在 WinForms 中有一个CellPainting 事件可以帮助我们实现这个目的。
我无法在 WPF 中找到任何内容。
我想突出显示单元格中存在的部分文本,不是整个单元格。
任何帮助将不胜感激。
【问题讨论】:
标签: c# wpf highlighting
我想在 WPF 应用程序的数据网格中突出显示字符串。
在 WinForms 中有一个CellPainting 事件可以帮助我们实现这个目的。
我无法在 WPF 中找到任何内容。
我想突出显示单元格中存在的部分文本,不是整个单元格。
任何帮助将不胜感激。
【问题讨论】:
标签: c# wpf highlighting
你可以:
添加一个 DataGridTemplateColumn。在模板中放置一个 TextBlock。 然后,选项 1:插入你的 textBlock Run 中。设置他们的格式。并将运行绑定到您的数据。 选项2:通过转换器等在程序代码中设置TextBlock的内容。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding xx}" Background="Yellow" />
<Run Text="{Binding yy}" />
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
XAML
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate.Resources>
<myns:ConvertToFormatedRuns xmlns:myns="clr-namespace:YourProjectName" />
</DataTemplate.Resources>
<Label>
<Label.Content>
<MultiBinding Converter={StaticResource ConvertToFormatedRuns}>
<Binding Path="xxx" />
<Binding Path="yyy" />
</MultiBinding>
</Label.Content>
</Label>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
代码
public class ConvertToFormatedRuns : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var tb = new TextBlock();
tb.Inlines.Add(new Run() { Text = (string)values[0], Background = Brushes.Yellow });
tb.Inlines.Add(new Run() { Text = (string)values[1]});
return tb;
}
}
评论:你也可以像 WinForms 一样绘图,但没有必要,不推荐。
【讨论】: