自定义 DataGrid Header 中的宽度绑定产生错误
Width binding in custom DataGrid Header produces error
我创建了一个自定义 DataGrid
Header,其中包含用于文本的 TextBlock
和放置在 DockPanel
中的 Image
。
我将 TextBlock
的 Width
绑定到 DataGridTextColumn
的 ActualWidth
,如下所示:
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;
我创建了一个自定义 DataGrid
Header,其中包含用于文本的 TextBlock
和放置在 DockPanel
中的 Image
。
我将 TextBlock
的 Width
绑定到 DataGridTextColumn
的 ActualWidth
,如下所示:
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;