2011-11-25 77 views
1

好了,對不起,我提前英語,在這裏我需要什麼:有沒有更簡單/更好的方法來自動調整一列ListView的內容?

我得到了ListViewXAML(WPF),其中有項目位於什麼,我需要的是一個項目有寬度等於ListView的寬度。

到目前爲止,我這樣做:

<ListView Name="lvFiles" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListView.View> 
    <GridView> 
     <GridViewColumn> 
     <GridViewColumn.CellTemplate> 
      <DataTemplate> 
       <Grid Width="{Binding ElementName="lvFiles", Path=ActualWidth}"> 
        <!-- All the controls inside I need to present an item --> 
       </Grid> 
      </DataTemplate> 
     </GridViewColumn.CellTemplate> 
     </GridViewColumn> 
    </GridView> 
    </ListView.View> 
</ListView> 

但事實證明,在ListView項目成爲右側裁剪垂直滾動條出現時。而且,當所有項目的總高度超過ListView.ActualHeight時,所以我需要更復雜的用戶綁定,因此更復雜。

此外,我的項目,我花了幾個小時來解決問題,我的項目有時被剪在右側,沒有明顯的原因。

於是我想出了這一點:

<ListView Name="lvFiles" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListView.View> 
    <GridView> 
     <GridViewColumn Width="{Binding ElementName=lvFiles, Path=ActualWidth}"> 
     <GridViewColumn.CellTemplate> 
      <DataTemplate> 
       <Decorator Width="{Binding RelativeSource={RelativeSource 
          Mode=FindAncestor, AncestorType=ListViewItem}, 
          Path=ActualWidth}"> 

        <Grid Margin="0,0,18,0"> 
         <!-- All the controls inside... --> 
        </Grid> 
       </Decorator> 
      </DataTemplate> 
     </GridViewColumn.CellTemplate> 
     </GridViewColumn> 
    </GridView> 
    </ListView.View> 
</ListView> 

它解決問題的剪裁,也將其與一個圓柱的ListViewItem自動調整大小解決了這個問題。但現在它似乎不是最簡單的方法。有沒有這樣的?

回答

3

您沒有使用標題,因此您可以直接使用ListView而不使用GridView。至於寬度,不要調整內容寬度,但要調整寬度。

下面是一個例子:

<Style x:Key="singleListViewItemStyle" 
     BasedOn="{StaticResource {x:Type ListViewItem}}" 
     TargetType="{x:Type ListViewItem}"> 
    <Setter Property="Width" 
      Value="{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type VirtualizingStackPanel}}}" /> 
</Style> 

如果您還沒有一個現有的風格定位ListViewItem或不想繼承它,你可以刪除BasedOn="{StaticResource {x:Type ListViewItem}}"

AncestorType={x:Type VirtualizingStackPanel}是因爲默認情況下使用的,那就是ListView中顯示其內容。如果你有自己的ListView主題,那麼請看下面的例子:

<ListView Name="myListView" 
      ItemContainerStyle="{StaticResource ResourceKey=singleListViewItemStyle}" 
      ItemsSource="{Binding Path=MyItems}" 
      SelectedItem="{Binding Path=MySelectedItem, Mode=TwoWay}" 
      SelectionMode="Single"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <!--Your favorite controls--> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

這裏是link的演示項目我爲你而做。你也可以看到我的其他控件。

我希望這會有所幫助。

+0

在這種情況下,我看不到我的fav控件或任何項目。 ListView是空的。 – AgentFire

+0

@AgentFire使用Snoop查看你去了哪裏錯誤...我可以告訴你它的工作方式... – Ankesh

+1

@AgentFire檢查演示項目的鏈接 – Ankesh

相關問題