【问题标题】:Width binding in custom DataGrid Header produces error自定义 DataGrid Header 中的宽度绑定会产生错误
【发布时间】:2015-09-29 03:44:10
【问题描述】:

我创建了一个自定义 DataGrid 标头,其中包含一个用于文本的 TextBlock 和一个位于 DockPanel 内的 Image。 我将TextBlockWidth 绑定到DataGridTextColumnActualWidth,如下所示:

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多