2011-11-25 80 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

相关问题