我有一个WPF WrapPanel,它包含一些Buttons,我想在运行时重新排列它们。设计时的XAML代码如下:

<Grid x:Name="LayoutRoot">
    <WrapPanel Margin="133,127,216,189" Background="#FF979797">
        <Button Content="Button" Width="75"/>
        <Button Content="Button" Width="75"/>
        <Button Content="Button" Width="75"/>
        <Button Content="Button" Width="75"/>
        <Button Content="Button" Width="75"/>
        <Button Content="Button" Width="75"/>
    </WrapPanel>
</Grid>

但是,我想在运行时重新排列Buttons。你能帮我一下吗?

最佳答案

您可以执行以下操作:

    <ItemsControl ItemsSource="{Binding Items}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Button Content="{Binding}" Width="75"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

项目将是您的DataContext上的属性,并且通常是某种ObservableCollection。在最简单的情况下,它可能是与按钮标题相对应的字符串的集合。当您重新排列ObservableCollection元素时,它将使用WrapPanel来重新排列ItemsControl中的相应按钮。

附带说明一下,使用这种方法是朝着所谓的MVVM模式(Model-View-ViewModel)迈出的一步。这正迅速成为开发WPF应用程序的行业标准模式,并且在其上具有很多优势创建灵活的动态用户界面。如果您想进行任何重要的WPF开发,我强烈建议您研究这种模式。习惯需要一些时间,但最终还是值得的。

关于c# - 在运行时在WrapPanel中重新排列控件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17552474/

10-12 12:49