在WPF DataGrid的单个单元格上设置划线的最佳方法
本文关键字:最佳 方法 设置 单元格 WPF DataGrid 单个 | 更新日期: 2023-09-27 17:50:35
在WPF DataGrid的单个单元格上设置字体为划线样式的最佳(简单)方法是什么?
…
选项,我知道是插入TextBlock控件在单个单元格或使用datagridtemplatecoluml -并使用其中的text装饰品属性。无论哪种方式,这都是一个相当大的任务,我想使用默认的DataGrid自动生成列功能,特别是因为我的ItemsSource是一个数据表。
作为和一边,有任何方法来访问使用默认的DataGridTextColumn生成的TextBlock ?
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="TextDecorations" Value="Strikethrough"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
当然,你可以把setter包在DataTrigger中,以便有选择地使用它
如果您想要绑定基于特定单元格的划线,您就会遇到绑定问题,因为DataGridTextColumn。绑定只改变TextBox.Text的内容。如果Text属性的值是你所需要的,你可以绑定到TextBox本身:
<Setter Property="TextDecorations"
Value="{Binding RelativeSource={RelativeSource Self},
Path=Text,
Converter={StaticResource TextToTextDecorationsConverter}}" />
但是如果你想绑定到不同于TextBox的东西。文本,您必须通过DataGridRow绑定,它是可视树中TextBox的父类。DataGridRow有一个Item属性,它允许访问整行所使用的完整对象。
<Setter Property="TextDecorations"
Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}},
Path =Item.SomeProperty,
Converter={StaticResource SomePropertyToTextDecorationsConverter}}" />
转换器看起来像这样,假设某物是布尔类型:
public class SomePropertyToTextDecorationsConverter: IValueConverter {
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
if (value is bool) {
if ((bool)value) {
TextDecorationCollection redStrikthroughTextDecoration =
TextDecorations.Strikethrough.CloneCurrentValue();
redStrikthroughTextDecoration[0].Pen =
new Pen {Brush=Brushes.Red, Thickness = 3 };
return redStrikthroughTextDecoration;
}
}
return new TextDecorationCollection();
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
throw new NotImplementedException();
}
}