using PDF_Master.Helper;
using PDF_Master.Views.HomePanel.RecentFiles;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace PDF_Master.Views.HomePanel
{
///
/// HomeGuidContent.xaml 的交互逻辑
///
public partial class HomeGuidContent : UserControl
{
public HomeGuidContent()
{
InitializeComponent();
}
private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
e.Handled = true;
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
{
RoutedEvent = UIElement.MouseWheelEvent,
Source = sender
};
var listView = FindChild(sender as DependencyObject);
listView.RaiseEvent(eventArg);
}
private static T FindChild(DependencyObject parent) where T : DependencyObject
{
if (parent == null) return null;
var foundChild = default(T);
var childCount = VisualTreeHelper.GetChildrenCount(parent);
for (var i = 0; i < childCount; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
if (child is T t)
{
foundChild = t;
break;
}
foundChild = FindChild(child);
if (foundChild != null) break;
}
return foundChild;
}
private void Recentlist_MouseDown(object sender, MouseButtonEventArgs e)
{
//Windows:最近文件列表补充点击空白处取消选中;移除Esc取消选中逻辑
// 文件列表,需要点击其他空白区域取消文件选中
if (e.ClickCount == 1 && e.LeftButton == MouseButtonState.Pressed && Recentlist.GridRecentFilesList.Visibility == Visibility.Visible && Recentlist.GridRecentFilesList.SelectedItems.Count > 0)
{
HitTestResult hitTestResult = VisualTreeHelper.HitTest(Recentlist.GridRecentFilesList, e.GetPosition(Recentlist.GridRecentFilesList));
if (hitTestResult == null)
{
Recentlist.GridRecentFilesList.SelectedItems.Clear();
}
else if (hitTestResult.VisualHit == Recentlist.GridRecentFilesList)
{
Recentlist.GridRecentFilesList.SelectedItems.Clear();
}
else if (hitTestResult.VisualHit is ScrollViewer scrollViewer)
{
Recentlist.GridRecentFilesList.SelectedItems.Clear();
}
}
else if (e.ClickCount == 1 && e.LeftButton == MouseButtonState.Pressed && Recentlist.RecentFilesList.Visibility == Visibility.Visible && Recentlist.RecentFilesList.SelectedItems.Count > 0)
{
HitTestResult hitTestResult = VisualTreeHelper.HitTest(Recentlist.RecentFilesList, e.GetPosition(Recentlist.RecentFilesList));
if (hitTestResult == null)
{
Recentlist.RecentFilesList.SelectedItems.Clear();
}
else if (hitTestResult.VisualHit == Recentlist.RecentFilesList)
{
Recentlist.RecentFilesList.SelectedItems.Clear();
}
else if (hitTestResult.VisualHit is ScrollViewer scrollViewer)
{
Recentlist.RecentFilesList.SelectedItems.Clear();
}
}
}
private void UserControl_MouseDown(object sender, MouseButtonEventArgs e)
{
Recentlist_MouseDown(sender, e);
}
}
}