2015-07-10 77 views
1

我已经创建了自定义DataGrid标题,其中包含用于Text的TextBlock和位于DockPanel内的Image。 我绑定TextBlockWidthDataGridTextColumnActualWidth如下:自定义DataGrid标题中的宽度绑定会产生错误

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')

缺少什么我在这里?

+0

看来你是在返回'返回VAL负值 - Subtractor',这是不是为一个有效的值宽度属性。你应该检查结果是否大于等于0,即'返回Math.Max(0,val - 减法器);' – Clemens

回答

1

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

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

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

非常感谢@Herdo。很明显。傻我。 –