它可以通过跟踪 StackPanel 的 Children-property 的 index-element 来实现。我向您发送了一些示例代码来演示其工作原理。例如,考虑以下代码:
int currentSelectedIndex = stackPanel1.Children.IndexOf(CurrentSelectedTextBlock);
int downIndex = currentSelectedIndex + 1;
int childCount = stackPanel1.Children.Count;
if (downIndex < childCount)
{
stackPanel1.Children.RemoveAt(currentSelectedIndex);
stackPanel1.Children.Insert(downIndex, CurrentSelectedTextBlock);
}
else if (downIndex == childCount)
{
stackPanel1.Children.RemoveAt(currentSelectedIndex);
stackPanel1.Children.Insert(currentSelectedIndex, CurrentSelectedTextBlock);
}
它获取当前选定的 TextBlock 并将其索引向上移动一格。然后,您需要通过删除并重新插入来更新 StackPanel 的 Children-property。
我质疑您是否想将 StackPanel 用于此类目的。使用 ItemsControl 更容易,例如 ListBox,因为它们可以绑定到 T 的 ObservableCollection。一旦绑定的集合更新,控件也会更新。
我希望这有帮助。示例代码可以在这里下载。