C# 如何以编程方式设置WPF DataGrid TextTriming属性
我有一些WPF数据网格,它们在C代码中设计得非常好,如下所示。TextAlignment、TextWrapping和工具提示都工作正常。但是,我无法显示省略号文本修剪。你能告诉我我做错了什么吗C# 如何以编程方式设置WPF DataGrid TextTriming属性,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一些WPF数据网格,它们在C代码中设计得非常好,如下所示。TextAlignment、TextWrapping和工具提示都工作正常。但是,我无法显示省略号文本修剪。你能告诉我我做错了什么吗 public static void FormatGrid(ref DataGrid oDataGrid, List<ColumnFormat> oColumnFormats) { oDataGrid.CanUserResizeColumns = true; SetHighli
public static void FormatGrid(ref DataGrid oDataGrid, List<ColumnFormat> oColumnFormats)
{
oDataGrid.CanUserResizeColumns = true;
SetHighlightBrush(ref oDataGrid, oUser);
oDataGrid.Background = GetBackgroundBrush(oUser);
oDataGrid.Foreground = GetBrushForeground(oUser, ColorType.Medium);
for (int iColumn = 0; iColumn < oDataGrid.Columns.Count; iColumn++)
{
DataGridColumn oColumn = oDataGrid.Columns[iColumn];
ColumnFormat oColumnFormat = GetColumnFormat(oColumn);
if (oColumn.Visibility == Visibility.Visible)
{
if (oColumnFormat != null)
{
oColumn.CellStyle = GetCellStyle(oColumnFormat.ColumnName);
}
}
}
}
private static Style GetCellStyle(string sToolTipPath)
{
Style oCellStyle = new Style(typeof(DataGridCell));
SetterBaseCollection oSetters = GetStyleSetters(sToolTipPath);
foreach (Setter oSetter in oSetters)
{
oCellStyle.Setters.Add(oSetter);
}
return oCellStyle;
}
private static SetterBaseCollection GetStyleSetters(string sToolTipPath)
{
SetterBaseCollection oSetters = new SetterBaseCollection();
Setter oTextAlignment = new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Left);
oSetters.Add(oTextAlignment);
Setter oTextWrapping = new Setter(TextBlock.TextWrappingProperty, TextWrapping.NoWrap);
oSetters.Add(oTextWrapping);
Setter oTextTrimming = new Setter(TextBlock.TextTrimmingProperty, TextTrimming.CharacterEllipsis);
oSetters.Add(oTextTrimming);
Setter oToolTip = new Setter(TextBlock.ToolTipProperty, new Binding(sToolTipPath));
oSetters.Add(oToolTip);
return oSetters;
}
我不能确切地告诉您问题的原因是什么,除了文本修剪似乎是一种特殊情况,不管是出于什么XYZ原因。即使尝试通过XAML进行设置,这也适用于我的自定义DataGrid CellStyle:
<Setter Property="TextBlock.Foreground" Value="Red"/>
<Setter Property="TextBlock.TextTrimming" Value="CharacterEllipsis"/>
Private Sub CustomDataGrid_AutoGeneratingColumn(sender As Object, e As DataGridAutoGeneratingColumnEventArgs) Handles Me.AutoGeneratingColumn
e.Cancel = True
Dim binding As New Binding
Dim textColumn = TryCast(e.Column, DataGridTextColumn)
If textColumn IsNot Nothing Then
binding = textColumn.Binding
binding.TargetNullValue = "-"
End If
Columns.Add(New CustomColumn() With {.Header = e.Column.Header, .Binding = binding})
End Sub
Public Class CustomColumn
Protected Overrides Function GenerateElement(cell As DataGridCell, dataItem As Object) As FrameworkElement
Dim block As New TextBlock()
Dim column As CustomColumn = DirectCast(cell.Column, CustomColumn)
Dim binding As Binding = DirectCast(column.Binding, Binding)
If binding IsNot Nothing Then
Dim cellBinding As New Binding(binding.Path.Path)
cellBinding.Source = dataItem
cellBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
cellBinding.ValidatesOnDataErrors = True
cellBinding.ValidatesOnExceptions = True
cellBinding.NotifyOnValidationError = True
cellBinding.ValidatesOnNotifyDataErrors = True
cellBinding.Mode = BindingMode.OneWay
block.SetBinding(TextBlock.TextProperty, cellBinding)
block.TextTrimming = TextTrimming.CharacterEllipsis
End If
Return block
End Function
End Class