Files
community/Ink Canvas/MainWindow_cs/MW_PageListView.cs
T

146 lines
6.1 KiB
C#
Raw Normal View History

2025-08-03 16:46:33 +08:00
using Ink_Canvas.Helpers;
using System.Collections.ObjectModel;
2025-05-25 09:29:48 +08:00
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Ink;
using System.Windows.Input;
namespace Ink_Canvas
{
public partial class MainWindow : Window
{
private class PageListViewItem
{
public int Index { get; set; }
public StrokeCollection Strokes { get; set; }
}
ObservableCollection<PageListViewItem> blackBoardSidePageListViewObservableCollection = new ObservableCollection<PageListViewItem>();
/// <summary>
/// <para>刷新白板的缩略图页面列表。</para>
/// </summary>
private void RefreshBlackBoardSidePageListView()
{
2025-08-03 16:46:33 +08:00
if (blackBoardSidePageListViewObservableCollection.Count == WhiteboardTotalCount)
{
2025-05-25 09:29:48 +08:00
foreach (int index in Enumerable.Range(1, WhiteboardTotalCount))
{
var st = ApplyHistoriesToNewStrokeCollection(TimeMachineHistories[index]);
st.Clip(new Rect(0, 0, (int)inkCanvas.ActualWidth, (int)inkCanvas.ActualHeight));
2025-07-28 14:40:44 +08:00
var pitem = new PageListViewItem
2025-05-25 09:29:48 +08:00
{
Index = index,
Strokes = st,
};
2025-08-03 16:46:33 +08:00
blackBoardSidePageListViewObservableCollection[index - 1] = pitem;
2025-05-25 09:29:48 +08:00
}
2025-08-03 16:46:33 +08:00
}
else
{
2025-05-25 09:29:48 +08:00
blackBoardSidePageListViewObservableCollection.Clear();
2025-08-03 16:46:33 +08:00
foreach (int index in Enumerable.Range(1, WhiteboardTotalCount))
{
2025-05-25 09:29:48 +08:00
var st = ApplyHistoriesToNewStrokeCollection(TimeMachineHistories[index]);
2025-08-03 16:46:33 +08:00
st.Clip(new Rect(0, 0, (int)inkCanvas.ActualWidth, (int)inkCanvas.ActualHeight));
2025-07-28 14:40:44 +08:00
var pitem = new PageListViewItem
2025-05-25 09:29:48 +08:00
{
Index = index,
Strokes = st,
};
blackBoardSidePageListViewObservableCollection.Add(pitem);
}
}
var _st = inkCanvas.Strokes.Clone();
_st.Clip(new Rect(0, 0, (int)inkCanvas.ActualWidth, (int)inkCanvas.ActualHeight));
2025-07-28 14:40:44 +08:00
var _pitem = new PageListViewItem
2025-05-25 09:29:48 +08:00
{
Index = CurrentWhiteboardIndex,
Strokes = _st,
};
blackBoardSidePageListViewObservableCollection[CurrentWhiteboardIndex - 1] = _pitem;
2025-08-03 16:46:33 +08:00
BlackBoardLeftSidePageListView.SelectedIndex = CurrentWhiteboardIndex - 1;
BlackBoardRightSidePageListView.SelectedIndex = CurrentWhiteboardIndex - 1;
2025-05-25 09:29:48 +08:00
}
public static void ScrollViewToVerticalTop(FrameworkElement element, ScrollViewer scrollViewer)
{
var scrollViewerOffset = scrollViewer.VerticalOffset;
var point = new Point(0, scrollViewerOffset);
var tarPos = element.TransformToVisual(scrollViewer).Transform(point);
scrollViewer.ScrollToVerticalOffset(tarPos.Y);
}
2025-08-03 16:46:33 +08:00
private void BlackBoardLeftSidePageListView_OnMouseUp(object sender, MouseButtonEventArgs e)
{
2025-05-25 09:29:48 +08:00
AnimationsHelper.HideWithSlideAndFade(BoardBorderLeftPageListView);
AnimationsHelper.HideWithSlideAndFade(BoardBorderRightPageListView);
var item = BlackBoardLeftSidePageListView.SelectedItem;
var index = BlackBoardLeftSidePageListView.SelectedIndex;
if (item != null)
{
2025-07-28 15:47:18 +08:00
// 只有当选择的页面与当前页面不同时才进行切换
if (index + 1 != CurrentWhiteboardIndex)
{
2025-08-31 08:51:50 +08:00
// 隐藏图片选择工具栏
if (currentSelectedElement != null)
{
2025-08-31 09:12:30 +08:00
// 保存当前编辑模式
var previousEditingMode = inkCanvas.EditingMode;
2025-08-31 08:51:50 +08:00
UnselectElement(currentSelectedElement);
2025-08-31 09:12:30 +08:00
// 恢复编辑模式
inkCanvas.EditingMode = previousEditingMode;
2025-08-31 08:51:50 +08:00
currentSelectedElement = null;
}
2025-07-28 15:47:18 +08:00
SaveStrokes();
ClearStrokes(true);
CurrentWhiteboardIndex = index + 1;
RestoreStrokes();
UpdateIndexInfoDisplay();
}
2025-07-28 16:04:36 +08:00
// 无论是否切换页面,都更新选择索引
2025-05-25 09:29:48 +08:00
BlackBoardLeftSidePageListView.SelectedIndex = index;
}
}
private void BlackBoardRightSidePageListView_OnMouseUp(object sender, MouseButtonEventArgs e)
{
AnimationsHelper.HideWithSlideAndFade(BoardBorderLeftPageListView);
AnimationsHelper.HideWithSlideAndFade(BoardBorderRightPageListView);
var item = BlackBoardRightSidePageListView.SelectedItem;
var index = BlackBoardRightSidePageListView.SelectedIndex;
if (item != null)
{
2025-07-28 15:47:18 +08:00
// 只有当选择的页面与当前页面不同时才进行切换
if (index + 1 != CurrentWhiteboardIndex)
{
2025-08-31 08:51:50 +08:00
// 隐藏图片选择工具栏
if (currentSelectedElement != null)
{
2025-08-31 09:12:30 +08:00
// 保存当前编辑模式
var previousEditingMode = inkCanvas.EditingMode;
2025-08-31 08:51:50 +08:00
UnselectElement(currentSelectedElement);
2025-08-31 09:12:30 +08:00
// 恢复编辑模式
inkCanvas.EditingMode = previousEditingMode;
2025-08-31 08:51:50 +08:00
currentSelectedElement = null;
}
2025-07-28 15:47:18 +08:00
SaveStrokes();
ClearStrokes(true);
CurrentWhiteboardIndex = index + 1;
RestoreStrokes();
UpdateIndexInfoDisplay();
}
2025-07-28 16:04:36 +08:00
// 无论是否切换页面,都更新选择索引
2025-05-25 09:29:48 +08:00
BlackBoardRightSidePageListView.SelectedIndex = index;
}
}
}
}