当前位置: 首页 > 编程语言 > C#

在stackpanel WPF中排序元素分享

时间:2023-04-10 18:03:19 C#

C#学习教程:在StackpanelWPF中对元素进行排序这些元素有一个索引,我需要在新建时保留这些索引,我需要按索引对这些元素进行排序,所以我制作了一个快速排序函数,根据索引对它们进行排序,但在交换行y=items[我];//y是一个临时变量items[i]=items[j];我得到“指定的索引已在使用中。首先断开指定索引处的Visual子节点”我尝试将它们复制到临时变量,将它们从集合中删除,然后使用UIElementCollection中的Insert函数将它们分配给它们的权利索引,但随后我得到“指定的Visual已经是另一个Visual的子项或CompositionTarget的根”是否需要克隆的元素或某处缺少某些东西?为什么不使用ListBox/ItemsSontrol并使用CollectionViewSorce/SortDescription来完成这项工作。将元素添加到LayOut面板(如堆栈面板)不是有效的WPF应用程序。具有垂直方向的StackPanel是ListBox/ItemsControl的默认设置,但是如果您想要一些不同的布局,您总是可以覆盖ListBox.ItemsPanel模板如果您可以遵循MVVMapporach然后在ViewModel类中指定属性(在您的情况下接下来它将是Index)和设置listBox级别的SortDescription将自动为您提供此功能。您只需添加/删除绑定到ListBox.ItemsSource的ObservableCollection,而不是添加和删除实际的UIElement。并指定合适的DataTemplate。如果您不熟悉CollectionViewSource,请检查此-http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource.sortdescriptions.aspx代码将更像下面..它非常简单.注意:上面的答案是正确的,但是如果你不能改变你的堆栈面板(如果你没有足够的时间,或者写了很多与堆栈面板相关的代码),试试这个:Storecontrolsinlistordictionarytolistor用于排序的字典从堆栈面板中删除控件,使用:StackPanel.Children.Remove(child)ForeachList或Dictionary的成员将控件添加到StackPanel,使用:StackPanel.Children.Insert(i,child);注意:代码在运行时,Remove函数从StackPanel项(从树中)移除控件,但控件已经在内存中,因此控件可以插入或插入任何StackPanel中。如果要执行此操作,则需要确保Parent为null并且未使用面板中的索引。如果你只是把它换成一个临时变量,它仍然是同一个引用。使用VisualTreeHelper取消或移动您的UIElement。如果给每个元素一个特定的名称(即索引)。移除该控件时,只需重命名结果控件即可。之后,您的所有控件都将被排序。以上就是《C#学习教程:SortingelementsinstackpanelWPF》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: