WPF ListView缩小内容以适应容器

时间:2018-05-14 05:42:15

标签: wpf

我有一个显示x项的ListView。它的定义是这样的;

<UserControl>
    <UserControl.Resources>
        <DataTemplate x:Key="MyCard" DataType="models:MyModel">
            <StackPanel Background="{Binding BackgroundColour}"
                        Orientation="Vertical">
                <Image Source="{Binding ImageSource}"
                       Stretch="Uniform"/>
                <Label Content="{Binding MyType, Converter={StaticResource EnumDisplayNameConverter}}" />
            </StackPanel>
        </DataTemplate>
    </UserControl.Resources>

<ListView ItemsSource="{x:Static myNamespace:MyViewModel.Options}"
          ScrollViewer.HorizontalScrollBarVisibility="Disabled"
          ScrollViewer.VerticalScrollBarVisibility="Disabled"
          ItemTemplate="{StaticResource MyCard}">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>
</UserControl>

不幸的是,物品仍然从可视区域流出并被剪裁,如此;

Clipped

我期待这些项目会调整大小以适应边界,但显然情况并非如此。我已尝试在ViewBox添加DataTemplate来解决此问题,但它仍未按预期运行。

图片均为300px x 300px,我们尝试在MaxWidthMaxHeightStackPanel上设置ViewBox / Image,但它仍然会离开&#34;结束&#34;。

有关如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:0)

在内部模板内部,不要使用StackPanel,因为它会自动生成边界以容纳内容(并且还会重叠ListBox可滚动区域)。如果您希望自动调整大小,请使用Grid代替或在内部控件上设置精确大小,如Image等。