【问题标题】:Autosize ListView Items in WPF Based on Parent Size根据父大小自动调整 WPF 中的 ListView 项目大小
【发布时间】:2018-07-15 14:52:25
【问题描述】:

我的项目中有一个 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,但是没有区别。

【问题讨论】:

  • 关于ItemsPanelTemplate 的选择,似乎UniformGrid 的行为比WrapPanel 更接近您的需要。

标签: c# wpf listview size


【解决方案1】:

这是因为水平的WrapPanel 不会拉伸其内容,它要么适合项目,要么溢出到下一行。

一种解决方案是覆盖度量并安排需要更多努力的方法。

另一种是将UniformGrid 用作ItemsPanelTemplate,它会自动拉伸其内容。

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <UniformGrid Rows="{Binding NumberOfRows}" Columns="{Binding NumberOfColumns}"/>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

然后在如下代码中修改这两个变量(NumberOfRows, NumberOfColumns):

//you need access to listview object
//set the number of columns based on the current width of listview
if(listview.ActualWidth <= 450)
    NumberOfColumns = 3;
else if(listview.ActualWidth <= 600)
    ...

或者如果您可以将其表述为:

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 instead
NumberOfRows = (int)Math.Ceiling(ImageUserList.Count / (double)NumberOfColumns);

确保您获得正确的DataContext 以便绑定到这两个变量。

【讨论】:

    猜你喜欢
    • 2011-07-18
    • 2019-07-31
    • 2011-11-13
    • 2015-07-16
    • 2014-05-04
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多