运行时重新排列WrapPanel中的控件

5

我有一个WPF的WrapPanel,它包含一些按钮,我想在运行时重新排列它们。设计时的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>

但是,我想在运行时重新排列按钮。你能帮我吗?

2个回答

3
您可以像这样做:

您可以这样做:

    <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应用程序的行业标准模式,并且在创建灵活、动态的UI方面具有很多优势。如果要进行任何重要的WPF开发,我强烈建议研究一下这个模式。虽然需要一点时间来适应,但最终它非常值得。


0

如果您想在运行时重新排列子元素,有两个选项:在代码中创建(或至少操作)WrapPanel的子元素,而不是使用XAML;或者设置触发器(在Style标签中),根据需要操作按钮。

这里有一个例子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接