根据父级大小自动调整 WPF 中的 ListView 项目

我的项目中有一个 ListView,我希望 ListView 中的项目相对于父窗口大小响应地调整大小。这种自动大小更改就像 instagram Windows 应用程序:


gif:http : //uupload.ir/files/c0rv_insta.gif


我希望能够在 DataTemplate 中指定 MaxHeight 和 MaxWidth,以便在项目达到大小限制时显示更多项目。


这是我的代码:


<ListView x:Name="ViewPosts" ItemsSource="{Binding ImageUser}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">

    <ListView.ItemsPanel>

        <ItemsPanelTemplate>

             <WrapPanel Orientation="Horizontal" />

        </ItemsPanelTemplate>

    </ListView.ItemsPanel>

    <ListBox.ItemTemplate>

        <DataTemplate >

            <v:StateViewPostSimple/>

        </DataTemplate>

    </ListBox.ItemTemplate>

</ListView>

这是我的 DataTemplate / StateViewPostSimple:


<UserControl ....>

   <Grid>

       <Image Stretch="Fill" Source="{Binding Images[0].URI}" MaxHeight="150" MaxWidth="150" MinHeight="100" MinWidth="100"/>

   </Grid>

</UserControl>

我设置了MaxHeight、MaxWidth和MinHeight、MinWidth但它没有区别。


尚方宝剑之说
浏览 216回答 1
1回答

冉冉说

这是因为水平WrapPanel不会拉伸其内容,它要么适合项目,要么溢出到下一行。一种解决方案是覆盖测量并安排需要更多努力的方法。另一种是使用UniformGridasItemsPanelTemplate自动拉伸其内容。<ListView.ItemsPanel>&nbsp; &nbsp; <ItemsPanelTemplate>&nbsp; &nbsp; &nbsp; &nbsp; <UniformGrid Rows="{Binding NumberOfRows}" Columns="{Binding NumberOfColumns}"/>&nbsp; &nbsp; </ItemsPanelTemplate></ListView.ItemsPanel>然后在代码中修改这两个变量(NumberOfRows、NumberOfColumns),例如://you need access to listview object//set the number of columns based on the current width of listviewif(listview.ActualWidth <= 450)&nbsp; &nbsp; NumberOfColumns = 3;else if(listview.ActualWidth <= 600)&nbsp; &nbsp; ...或者如果您可以将其表述为:NumberOfColumns = (int)Math.listview.ActualWidth / 150;if(NumberOfColumns < 3) NumberOfColumns = 3;然后你可以找到行数://ImageUserList.Count = number of all items//listview.ItemsSource.Cast<object>().Count() can be used insteadNumberOfRows = (int)Math.Ceiling(ImageUserList.Count / (double)NumberOfColumns);确保你DataContext正确以绑定到这两个变量。
打开App,查看更多内容
随时随地看视频慕课网APP