using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace DrillTools { /// /// ToolReorderConfirmationWindow.xaml 的交互逻辑 /// public partial class ToolReorderConfirmationWindow : Window { /// /// 是否确认重排 /// public bool IsConfirmed { get; private set; } /// /// 构造函数 /// public ToolReorderConfirmationWindow() { InitializeComponent(); DataContext = new ToolReorderConfirmationViewModel(); } /// /// 使用原始和重排后的刀具列表初始化窗口 /// /// 原始刀具列表 /// 重排后刀具列表 public ToolReorderConfirmationWindow(IEnumerable originalTools, IEnumerable reorderedTools) : this() { if (DataContext is ToolReorderConfirmationViewModel viewModel) { viewModel.LoadTools(originalTools, reorderedTools); } } /// /// 确认按钮点击事件 /// private void ConfirmButton_Click(object sender, RoutedEventArgs e) { IsConfirmed = true; Close(); } /// /// 取消按钮点击事件 /// private void CancelButton_Click(object sender, RoutedEventArgs e) { IsConfirmed = false; Close(); } /// /// 原始刀序列表滚动事件处理 /// private void OriginalToolsListView_ScrollChanged(object sender, ScrollChangedEventArgs e) { if (sender is System.Windows.Controls.ListView listView && e.VerticalChange != 0) { // 获取原始列表的滚动位置 var scrollViewer = GetScrollViewer(listView); if (scrollViewer != null) { // 同步到重排后列表 var reorderedScrollViewer = GetScrollViewer(ReorderedToolsListView); if (reorderedScrollViewer != null) { reorderedScrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset); } } } } /// /// 重排后刀序列表滚动事件处理 /// private void ReorderedToolsListView_ScrollChanged(object sender, ScrollChangedEventArgs e) { if (sender is System.Windows.Controls.ListView listView && e.VerticalChange != 0) { // 获取重排后列表的滚动位置 var scrollViewer = GetScrollViewer(listView); if (scrollViewer != null) { // 同步到原始列表 var originalScrollViewer = GetScrollViewer(OriginalToolsListView); if (originalScrollViewer != null) { originalScrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset); } } } } /// /// 获取ListView中的ScrollViewer控件 /// /// ListView控件 /// ScrollViewer控件 private ScrollViewer GetScrollViewer(System.Windows.Controls.ListView listView) { if (listView == null) return null; // 使用VisualTreeHelper查找ScrollViewer for (int i = 0; i < VisualTreeHelper.GetChildrenCount(listView); i++) { var child = VisualTreeHelper.GetChild(listView, i); if (child is ScrollViewer scrollViewer) { return scrollViewer; } // 递归查找子控件 var result = GetScrollViewerFromChild(child); if (result != null) return result; } return null; } /// /// 从子控件中递归查找ScrollViewer /// /// 父控件 /// ScrollViewer控件 private ScrollViewer GetScrollViewerFromChild(DependencyObject parent) { if (parent == null) return null; for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) { var child = VisualTreeHelper.GetChild(parent, i); if (child is ScrollViewer scrollViewer) { return scrollViewer; } // 递归查找 var result = GetScrollViewerFromChild(child); if (result != null) return result; } return null; } } }