如何将DataGrid宽度绑定到转换器?

时间:2013-07-02 09:13:33

标签: wpf binding converter

我希望在定义DataGrid的宽度时包含VerticalScrollbar的大小。 到目前为止我写了一个转换器:

[ValueConversion(typeof(double), typeof(double))] 
public class VerticalScrollbarConverter : IValueConverter   
{
    #region IValueConverter Member
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {   
        if (value is double)
            return (double)value + SystemParameters.VerticalScrollBarWidth;
        else
            return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();            
    }
    #endregion
}

我将转换器包含在xaml命名空间中:

xmlns:Core="clr-namespace:Core;assembly=SMS_Core"

我将转换器定义为(窗口)资源:

    <Window.Resources>
    <Core:VerticalScrollbarConverter x:Key="VerticalScrollbarConverter"/>
</Window.Resources>

由于我的所有DataGrid.Columns都具有固定值,因此我知道需要传递的值。 如何告诉xaml中的GridView Width属性使用转换器?

我知道我的问题非常基本。你可以告诉我,我对WPF很新。

提前感谢每一个提示。如果您需要更多信息或背景信息,请随时提出。

1 个答案:

答案 0 :(得分:1)

sa_ddam213的评论并没有完全解决问题。但它肯定会让我走向正确的方向。 要自动传递值,我必须执行以下操作: 我在窗口类中创建了一个名为TotalColumnWidth的属性。回到这个:

myDataGrid.Columns.Sum(c => c.ActualWidth); 

xaml如下:

Width="{Binding ElementName=_Root, Path=TotalColumnWidth,  Converter={StaticResource ResourceKey=VerticalScrollbarConverter}}"

使用上述转换器。