WPF/MVVM包裹面板方向

本文关键字:方向 包裹 MVVM WPF | 更新日期: 2023-09-27 17:58:11

我想基本上显示一个按钮矩阵,按钮的数量在运行时会变化。我的问题是,我希望他们挨在一起,以填满我给他们的所有空间。我认为WrapPanel是做到这一点的完美方法,但它把按钮放在了一起,我不知道如何解决它。

    <Grid>
    <WrapPanel Width="250" Height="50" Orientation="Horizontal" Margin="543,442,73,162"  >
        <ItemsControl ItemsSource="{Binding States}"   >
            <ItemsControl.ItemTemplate>
                <DataTemplate  >
                    <Button Width="50" Height="25"  Content="{Binding StateName}" Padding="0"  ></Button>                   
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </WrapPanel>...</Grid>

States是一个包含名称和ID号的项目列表。如果我想添加或删除按钮,我会修改列表。因此,按钮以垂直顺序出现,并且它们超出了WrapPanel的限制,所以如果它不够大,只有一些按钮会出现。它们只使用250的宽度中的50,并且超过了50的高度。在这种情况下,如果我放了5个按钮,它只显示其中的2个。

WPF/MVVM包裹面板方向

不要将ItemsControl包裹在WrapPanel内部。相反,将其设置为ItemsControl的ItemsPanel

<ItemsControl ItemsSource="{Binding States}">
   <ItemsControl.ItemTemplate>
      <DataTemplate>
        <Button Width="50" Height="25"  Content="{Binding StateName}"
                Padding="0"/>  
      </DataTemplate>
    </ItemsControl.ItemTemplate>
   <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
         <WrapPanel/>
      </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
</ItemsControl>