This commit is contained in:
2025-09-20 12:03:30 +08:00
parent 17f137af09
commit a9cc94ccb6
4 changed files with 90 additions and 7 deletions
+12 -6
View File
@@ -191,9 +191,12 @@ namespace Ink_Canvas
RefreshBlackBoardSidePageListView(); RefreshBlackBoardSidePageListView();
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderLeftPageListView); AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderLeftPageListView);
await Task.Delay(1); await Task.Delay(1);
ScrollViewToVerticalTop( var leftContainer = BlackBoardLeftSidePageListView.ItemContainerGenerator.ContainerFromIndex(
(ListViewItem)BlackBoardLeftSidePageListView.ItemContainerGenerator.ContainerFromIndex( CurrentWhiteboardIndex - 1) as ListViewItem;
CurrentWhiteboardIndex - 1), BlackBoardLeftSidePageListScrollViewer); if (leftContainer != null)
{
ScrollViewToVerticalTop(leftContainer, BlackBoardLeftSidePageListScrollViewer);
}
} }
} }
else if (sender == BtnRightPageListWB) else if (sender == BtnRightPageListWB)
@@ -208,9 +211,12 @@ namespace Ink_Canvas
RefreshBlackBoardSidePageListView(); RefreshBlackBoardSidePageListView();
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderRightPageListView); AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderRightPageListView);
await Task.Delay(1); await Task.Delay(1);
ScrollViewToVerticalTop( var rightContainer = BlackBoardRightSidePageListView.ItemContainerGenerator.ContainerFromIndex(
(ListViewItem)BlackBoardRightSidePageListView.ItemContainerGenerator.ContainerFromIndex( CurrentWhiteboardIndex - 1) as ListViewItem;
CurrentWhiteboardIndex - 1), BlackBoardRightSidePageListScrollViewer); if (rightContainer != null)
{
ScrollViewToVerticalTop(rightContainer, BlackBoardRightSidePageListScrollViewer);
}
} }
} }
@@ -2134,6 +2134,11 @@ namespace Ink_Canvas
SaveStrokes(); SaveStrokes();
} }
if (!isAlreadyEraser)
{
ResetTouchStates();
}
// 启用新的高级橡皮擦系统 // 启用新的高级橡皮擦系统
EnableAdvancedEraserSystem(); EnableAdvancedEraserSystem();
@@ -2732,6 +2737,61 @@ namespace Ink_Canvas
if (isSingleFingerDragMode) BtnFingerDragMode_Click(BtnFingerDragMode, null); if (isSingleFingerDragMode) BtnFingerDragMode_Click(BtnFingerDragMode, null);
isLongPressSelected = false; isLongPressSelected = false;
ResetTouchStates();
}
/// <summary>
/// 重置所有触摸相关状态,
/// </summary>
private void ResetTouchStates()
{
try
{
// 清空触摸点计数器
dec.Clear();
// 重置多指触摸模式状态
if (isInMultiTouchMode)
{
isInMultiTouchMode = false;
}
// 重置单指拖动模式状态
if (isSingleFingerDragMode)
{
isSingleFingerDragMode = false;
if (BtnFingerDragMode != null)
{
BtnFingerDragMode.Content = "单指\n拖动";
}
}
// 重置手掌擦状态
if (isPalmEraserActive)
{
isPalmEraserActive = false;
palmEraserTouchDownHandled = false;
palmEraserTouchIds.Clear();
StopPalmEraserRecoveryTimer();
}
// 确保触摸事件能正常响应
inkCanvas.IsHitTestVisible = true;
inkCanvas.IsManipulationEnabled = true;
// 释放所有触摸捕获
inkCanvas.ReleaseAllTouchCaptures();
// 恢复UI元素的触摸响应
ViewboxFloatingBar.IsHitTestVisible = true;
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"重置触摸状态失败: {ex.Message}", LogHelper.LogType.Error);
}
} }
private void BtnHideControl_Click(object sender, RoutedEventArgs e) private void BtnHideControl_Click(object sender, RoutedEventArgs e)
+12 -1
View File
@@ -68,9 +68,20 @@ namespace Ink_Canvas
public static void ScrollViewToVerticalTop(FrameworkElement element, ScrollViewer scrollViewer) public static void ScrollViewToVerticalTop(FrameworkElement element, ScrollViewer scrollViewer)
{ {
if (element == null || scrollViewer == null)
{
return;
}
var scrollViewerOffset = scrollViewer.VerticalOffset; var scrollViewerOffset = scrollViewer.VerticalOffset;
var point = new Point(0, scrollViewerOffset); var point = new Point(0, scrollViewerOffset);
var tarPos = element.TransformToVisual(scrollViewer).Transform(point); var transform = element.TransformToVisual(scrollViewer);
if (transform == null)
{
return;
}
var tarPos = transform.Transform(point);
scrollViewer.ScrollToVerticalOffset(tarPos.Y); scrollViewer.ScrollToVerticalOffset(tarPos.Y);
} }
@@ -968,6 +968,12 @@ namespace Ink_Canvas
// 修复:允许单指拖动选中的墨迹,即使禁用了多指手势 // 修复:允许单指拖动选中的墨迹,即使禁用了多指手势
if (isInMultiTouchMode) return; if (isInMultiTouchMode) return;
if (dec.Count == 0 && (isSingleFingerDragMode || isInMultiTouchMode))
{
ResetTouchStates();
return;
}
// 如果是单指拖动选中的墨迹,允许处理 // 如果是单指拖动选中的墨迹,允许处理
if (dec.Count == 1 && inkCanvas.GetSelectedStrokes().Count > 0) if (dec.Count == 1 && inkCanvas.GetSelectedStrokes().Count > 0)