【发布时间】:2015-09-29 03:44:10
【问题描述】:
我创建了一个自定义 DataGrid 标头,其中包含一个用于文本的 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')
我在这里错过了什么?
【问题讨论】:
-
您似乎在
return val - Subtractor返回一个负值,这不是 Width 属性的有效值。您应该检查结果是否 >= 0,即return Math.Max(0, val - Subtractor);
标签: c# wpf datagrid width ivalueconverter