【问题标题】:WrapPanel width bindingWrapPanel 宽度绑定
【发布时间】:2011-06-29 01:29:16
【问题描述】:

如何将 WrapPanel 宽度绑定到 ListView 第一列的宽度。这两个控件都在用户控制之下。

【问题讨论】:

    标签: wpf listview binding


    【解决方案1】:

    对于 GridViewColumn,你有 ActualWidth 属性,它不是依赖属性,所以如果你直接绑定到它,当属性改变时你不会得到任何更新。然后你就有了 Width 属性,它是一个依赖属性,它会在大多数情况下为你提供正确的值,但并非总是如此,例如在自动调整大小时。将这两者结合起来应该会给你想要的结果。也就是监听Width属性的变化,返回一个MultiBinding的ActualWidth

    Xaml

    <WrapPanel ...>
        <WrapPanel.Width>
            <MultiBinding Converter="{StaticResource GridViewColumnWidthMultiConverter}">
                <Binding ElementName="listView" Path="View.Columns[0].Width"/>
                <Binding ElementName="listView" Path="View.Columns[0].ActualWidth"/>
            </MultiBinding>
        </WrapPanel.Width>
    </WrapPanel>
    <ListView Name="listView" ...>
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn .../>
                    <GridViewColumn .../>
                    <GridViewColumn .../>
                    <!--...-->
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>
    

    GridViewColumnWidthMultiConverter

    public class GridViewColumnWidthMultiConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            double width = (double)values[0];
            double actualWidth = (double)values[1];
            return actualWidth;
        }
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      相关资源
      最近更新 更多