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;
}
}
}