【问题标题】:How do I bind a DataGrid Width to a converter?如何将 DataGrid Width 绑定到转换器?
【发布时间】:2013-06-29 14:09:46
【问题描述】:

我想在定义 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 很陌生。

提前感谢您的每一个提示。如果您需要更多信息或上下文,请尽管询问。

【问题讨论】:

  • 你可以只在Binding中使用StaticResource关键字,例如:Width="{Binding TheWidth, Converter={StaticResource VerticalScrollbarConverter}}"
  • 是的!这正是我所需要的!非常感谢!
  • 没问题,很高兴为您提供帮助:)

标签: wpf binding converter


【解决方案1】:

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

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

xaml 如下:

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

使用上面提到的转换器。

【讨论】:

  • _Root 是窗口的名称。
猜你喜欢
  • 2012-01-06
  • 2012-10-04
  • 1970-01-01
  • 2011-10-12
  • 2014-01-13
  • 1970-01-01
  • 2014-08-23
  • 2014-10-23
  • 1970-01-01
相关资源
最近更新 更多