我有一个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
。你能帮我解决这个问题。
答案 0 :(得分: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元素时,它将重新排列ItemsControl中的相应按钮,使用WrapPanel进行排列。
另一方面,使用这种类型的方法是迈向所谓的MVVM模式(Model-View-ViewModel)的一步。这很快成为开发WPF应用程序的行业标准模式,并具有很多优点在创建灵活的动态UI时。如果您想进行任何重要的WPF开发,我强烈建议您研究这种模式。需要一点时间来习惯,但最终还是值得的。
答案 1 :(得分:0)
如果您想在运行时重新排列子项,您有两个选项,在代码中创建(或至少操纵)WrapPannel的子项而不是XAML,或者setting up Triggers(在样式标记中)根据需要操作按钮。
Here's一个例子。