WrapPanel宽度绑定

问题描述:

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

对于GridViewColumn,你有ActualWidth属性,它不是一个依赖属性,所以如果你直接绑定到它,当属性发生变化时你将不会得到任何更新。然后你有宽度属性这是一个依赖属性,并会给你大多数情况下正确的值,但并不总是如自动大小时。结合这两者应该会给你想要的结果。也就是说,听在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(); 
    } 
}