2011-01-27 40 views
1

我有一個ListView控件有3列:名稱,姓氏和地址。我希望所有3列具有相同的寬度。我想出的唯一辦法是給每個列的寬度綁定到祖先的ActualWidth的,並使用一個轉換器由3分這個寬度如下:如何使用相對綁定模式= FindAncestor

<GroupBox> 
    <ListView Name="People" ItemsSource="{Binding peopleList}"> 
     <ListView.View> 
       <GridView > 
         <GridViewColumn Header="name" DisplayMemberBinding="{Binding Name}"> 
           <GridViewColumn.Width> 
             <Binding Path="ActualWidth" Source="{RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}" Converter ="{StaticResource ListViewConverter}"/> 
            </GridViewColumn.Width> 
      <GridViewColumn Header="surname" ...> 
       ... 
      </GridViewColumn> 
      <GridViewColumn Header="address" ...> 
       ... 
      </GridViewColumn> 
          </GridViewColumn> 
        </GridView> 
      </ListView.View> 
    </ListView> 
</GroupBox> 

皈依類是:

class ListViewConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     double state = (double)value; 
     return state/3; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return null; 
    } 
} 

但這不起作用。我認爲GroupBox可能不是GridViewColumn.Width的祖先。 也許我錯了,有一個更簡單的方法來做到這一點?

回答

3

你是對的,GroupBox不是一個祖先 - 這是因爲GridViewColumn沒有添加到可視化樹中,所以依賴於可視化樹導航的綁定將不起作用。你可以將你的列綁定到一個靜態資源,而不是:

爲了實現你以後需要相當多的自定義代碼。見德以下MSDN論壇主題:

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/83bd7ab9-3407-461f-a0bc-69e04870075c

這裏的代碼,讓更多的選項,指定列大小:

http://www.codeproject.com/KB/grid/ListView_layout_manager.aspx

相關問題