自定义 DataGrid Header 中的宽度绑定产生错误

Width binding in custom DataGrid Header produces error

我创建了一个自定义 DataGrid Header,其中包含用于文本的 TextBlock 和放置在 DockPanel 中的 Image。 我将 TextBlockWidth 绑定到 DataGridTextColumnActualWidth,如下所示:

Width="{Binding ActualWidth, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource FitFilterImageToHeaderConverter}}"

我使用的简单转换器是减去 Image 的宽度:

    public class SubtractConverter : IValueConverter
{
    public double Subtractor { get; set; }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        double val = System.Convert.ToDouble(value);
        return val - Subtractor;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

一切正常,但我遇到了一个恼人的绑定错误。

System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='-11' BindingExpression:Path=ActualWidth; DataItem='ContentPresenter' (Name=''); target element is 'TextBlock' (Name=''); target property is 'Width' (type 'Double')

我在这里错过了什么?

您不能将 Width 属性 的值设置为小于零的值。 但是您将值设置为 -11。这会导致错误。

在您的转换器中,您应该检查返回的结果是否等于或大于零:

...
var result = val - Substractor;
return result > 0 ? result : 0;