2011-02-17 5 views
1

ListView의 첫 번째 열 너비에 WrapPanel 너비를 바인딩하려면 어떻게해야합니까? 두 컨트롤 모두 사용자 컨트롤입니다.WrapPanel 너비 바인딩

답변

1

GridViewColumn의 경우 종속성 속성이 아닌 ActualWidth 속성이 있으므로 직접 바인딩하면 속성이 변경 될 때 업데이트되지 않습니다. 그런 다음 종속성 속성 인 Width 속성을 가지며 대부분의 경우 올바른 값을 제공하지만 자동 크기 조정의 경우 항상 그렇습니다. 이 두 가지를 결합하면 원하는 결과를 얻을 수 있습니다. 즉

XAML을 Width 속성의 변화를 듣고와 MultiBinding와 ActualWidth 반환이다

<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(); 
    } 
}