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-减法器)代码>