Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式设置WPF DataGrid TextTriming属性_C#_Wpf_Datagrid - Fatal编程技术网

C# 如何以编程方式设置WPF DataGrid TextTriming属性

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

我有一些WPF数据网格,它们在C代码中设计得非常好,如下所示。TextAlignment、TextWrapping和工具提示都工作正常。但是,我无法显示省略号文本修剪。你能告诉我我做错了什么吗

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