2009-09-03 50 views
0

我正在嘗試調整WPF中的ListView。我想弄清楚如何強制ListView將其寬度縮小爲僅適合其列的寬度。我有一個ListView,我使用視圖屬性,並添加一些GridViewColumn就像這樣綁定:WPF ListView調整瘋狂

   <ListView ItemsSource="{Binding MyCollection}"> 
        <ListView.View> 
         <GridView> 
          <GridViewColumn Header="Name" Width={Binding NameWidth} DisplayMemberBinding="{Binding Name}"/> 
          <GridViewColumn Header="Fee" DisplayMemberBinding="{Binding Fee}"/> 

         </GridView> 
        </ListView.View> 
       </ListView> 

我綁定列的寬度,這樣我可以隱藏/取消隱藏列。當我取消隱藏列時,ListView會增長以適應新的寬度。但是當我再次隱藏列時,ListView的寬度不會縮小。

我試圖子類ListView,並呼籲像

InvalidateArrange()InvalidateMeasure()InvalidateVisual()一些命令。但他們沒有一個導致ListView縮小。

如果我重新加載收集到ListView它縮小以適合。但我認爲這並不優雅,也不是正確的做法。我已經通過Reflector旅行,發現自己處於混亂的泥潭。有人能給我一些見解嗎?

回答

0

您的ListView很可能是由其父容器決定的,而不是其內容。例如,ListView外部的Grid,StackPanel,DockPanel,Border等可能會拉伸您的ListView以填充其寬度。

如果這不能解決問題,請在帶有根WrapPanel的空白窗口中測試您的ListView,以將您的控件中任何其他周圍的XAML分解出來,並將該整個XAML發佈到該窗口。