UWP Listview,具有基于项目内容的itemswrapgrid设置宽度

时间:2017-05-15 08:53:27

标签: c# xaml uwp

我在UWP的datatemplate中有一个带有togglebuttons的Listview。我已将listview配置为itemwrapgrid。我试图根据切换按钮内容长度为项目分配不同的宽度。任何人都可以帮我这样做。

 <ListView x:Name="lstVw1" IsMultiSelectCheckBoxEnabled="True" Margin="0,20,0,0">
                    <ListView.ItemsPanel>
                        <ItemsPanelTemplate>
                            <ItemsWrapGrid Orientation="Horizontal" Width="Auto" HorizontalAlignment="Stretch"></ItemsWrapGrid>
                        </ItemsPanelTemplate>
                    </ListView.ItemsPanel>
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ToggleButton Style="{StaticResource ButtonStyle}" Content="{Binding ItemText}" Click="ToggleButton_Click">
                            </ToggleButton>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                    <ListView.ItemContainerStyle>
                        <Style TargetType="ListViewItem">
                            <Setter Property="HorizontalContentAlignment" Value="Stretch" />

                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <ContentPresenter Padding="5"/>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>

                    </ListView.ItemContainerStyle>
                </ListView>

上面的xaml在列表中给出了等大小的切换按钮

3 个答案:

答案 0 :(得分:1)

我会使用UWP Community Toolkit中的WrapPanel。您可以下载nuget包,然后将ListView的ItemsPanel更改为WrapPanel

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <wrapPanel:WrapPanel Orientation="Horizontal"/>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

请注意,WrapPanel被意外地放入Microsoft.Toolkit.Uwp.Controls.WrapPanel命名空间,因此您需要在XAML中声明wrapPanel命名空间

xmlns:wrapPanel="using:Microsoft.Toolkit.Uwp.Controls.WrapPanel"

答案 1 :(得分:0)

我为上面创建了一个自定义的包装面板。

Reference

答案 2 :(得分:0)

默认情况下,它的工作原理与此类似 - ItemTemplate将展开以适应内容。您可能需要将ItemsStackPanel用作ItemsPanelTemplate

你做错了就是这一行,你应该删除它:

<Setter Property="HorizontalContentAlignment" Value="Stretch" />