Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# 自定义DataGrid标头中的宽度绑定产生错误_C#_Wpf_Datagrid_Width_Ivalueconverter - Fatal编程技术网

C# 自定义DataGrid标头中的宽度绑定产生错误

C# 自定义DataGrid标头中的宽度绑定产生错误,c#,wpf,datagrid,width,ivalueconverter,C#,Wpf,Datagrid,Width,Ivalueconverter,我已经创建了一个自定义的DataGrid标题,其中包含文本的TextBlock和图像,放在DockPanel中。 我正在将TextBlock的Width绑定到DataGridTextColumn的实际宽度,如下所示: Width="{Binding ActualWidth, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource FitFilterImageToHeaderConverter}

我已经创建了一个自定义的
DataGrid
标题,其中包含文本的
TextBlock
图像
,放在
DockPanel
中。 我正在将
TextBlock
Width
绑定到
DataGridTextColumn
实际宽度,如下所示:

Width="{Binding ActualWidth, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource FitFilterImageToHeaderConverter}}"
我使用的简单转换器是减去
图像的宽度:

    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错误:5:BindingExpression生成的值对目标属性无效。;值='-11'绑定表达式:路径=实际宽度;DataItem='ContentPresenter'(名称='');目标元素为“TextBlock”(名称=“”);目标属性为“宽度”(类型为“双精度”)


这里缺少什么?

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

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

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

似乎在
return val-Subtractor
处返回负值,该值不是Width属性的有效值。您应该检查结果是否>=0,即
返回Math.Max(0,val-减法器)