improve:截图
This commit is contained in:
@@ -18,12 +18,14 @@
|
|||||||
<!-- 半透明遮罩 -->
|
<!-- 半透明遮罩 -->
|
||||||
<Rectangle Name="OverlayRectangle"
|
<Rectangle Name="OverlayRectangle"
|
||||||
Fill="Black"
|
Fill="Black"
|
||||||
Opacity="0.3" />
|
Opacity="0.3"
|
||||||
|
IsHitTestVisible="False" />
|
||||||
|
|
||||||
<!-- 透明选择区域遮罩 - 使用正确的几何体操作 -->
|
<!-- 透明选择区域遮罩 - 使用正确的几何体操作 -->
|
||||||
<Rectangle Name="TransparentSelectionMask"
|
<Rectangle Name="TransparentSelectionMask"
|
||||||
Fill="Black"
|
Fill="Black"
|
||||||
Opacity="0.3"
|
Opacity="0.3"
|
||||||
|
IsHitTestVisible="False"
|
||||||
Visibility="Collapsed">
|
Visibility="Collapsed">
|
||||||
<Rectangle.Clip>
|
<Rectangle.Clip>
|
||||||
<CombinedGeometry GeometryCombineMode="Exclude">
|
<CombinedGeometry GeometryCombineMode="Exclude">
|
||||||
@@ -43,8 +45,14 @@
|
|||||||
<Rectangle Name="SelectionRectangle"
|
<Rectangle Name="SelectionRectangle"
|
||||||
Stroke="White"
|
Stroke="White"
|
||||||
StrokeThickness="1"
|
StrokeThickness="1"
|
||||||
Fill="Transparent"
|
Fill="#01FFFFFF"
|
||||||
Visibility="Collapsed" />
|
Visibility="Collapsed"
|
||||||
|
IsHitTestVisible="True"
|
||||||
|
Panel.ZIndex="1001"
|
||||||
|
MouseLeftButtonDown="SelectionRectangle_MouseLeftButtonDown"
|
||||||
|
MouseLeftButtonUp="SelectionRectangle_MouseLeftButtonUp"
|
||||||
|
MouseMove="SelectionRectangle_MouseMove"
|
||||||
|
Cursor="SizeAll" />
|
||||||
|
|
||||||
<!-- 任意形状选择模式 -->
|
<!-- 任意形状选择模式 -->
|
||||||
<Path Name="SelectionPath"
|
<Path Name="SelectionPath"
|
||||||
|
|||||||
@@ -191,7 +191,8 @@ namespace Ink_Canvas
|
|||||||
hitElement is Separator ||
|
hitElement is Separator ||
|
||||||
hitElement.Name == "SizeInfoBorder" ||
|
hitElement.Name == "SizeInfoBorder" ||
|
||||||
hitElement.Name == "HintText" ||
|
hitElement.Name == "HintText" ||
|
||||||
hitElement.Name == "AdjustModeHint"))
|
hitElement.Name == "AdjustModeHint" ||
|
||||||
|
hitElement.Name == "SelectionRectangle"))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -243,6 +244,12 @@ namespace Ink_Canvas
|
|||||||
|
|
||||||
private void Window_MouseMove(object sender, MouseEventArgs e)
|
private void Window_MouseMove(object sender, MouseEventArgs e)
|
||||||
{
|
{
|
||||||
|
// 如果正在调整模式且正在移动,不处理窗口级别的鼠标移动
|
||||||
|
if (_isAdjusting && _isMoving)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (_isSelecting)
|
if (_isSelecting)
|
||||||
{
|
{
|
||||||
_currentPoint = e.GetPosition(this);
|
_currentPoint = e.GetPosition(this);
|
||||||
@@ -266,6 +273,12 @@ namespace Ink_Canvas
|
|||||||
|
|
||||||
private void Window_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
private void Window_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||||
{
|
{
|
||||||
|
// 如果正在调整模式且正在移动,不处理窗口级别的鼠标释放
|
||||||
|
if (_isAdjusting && _isMoving)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (_isSelecting)
|
if (_isSelecting)
|
||||||
{
|
{
|
||||||
_isSelecting = false;
|
_isSelecting = false;
|
||||||
@@ -456,6 +469,8 @@ namespace Ink_Canvas
|
|||||||
|
|
||||||
private void ShowControlPoints()
|
private void ShowControlPoints()
|
||||||
{
|
{
|
||||||
|
// 确保选择矩形在调整模式下可见
|
||||||
|
SelectionRectangle.Visibility = Visibility.Visible;
|
||||||
ControlPointsCanvas.Visibility = Visibility.Visible;
|
ControlPointsCanvas.Visibility = Visibility.Visible;
|
||||||
UpdateControlPointsPosition();
|
UpdateControlPointsPosition();
|
||||||
}
|
}
|
||||||
@@ -694,6 +709,75 @@ namespace Ink_Canvas
|
|||||||
return Math.Sqrt(dx * dx + dy * dy);
|
return Math.Sqrt(dx * dx + dy * dy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SelectionRectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||||
|
{
|
||||||
|
// 添加调试信息
|
||||||
|
System.Diagnostics.Debug.WriteLine($"SelectionRectangle_MouseLeftButtonDown: _isAdjusting={_isAdjusting}");
|
||||||
|
|
||||||
|
if (!_isAdjusting) return;
|
||||||
|
|
||||||
|
_isMoving = true;
|
||||||
|
_activeControlPoint = ControlPointType.Move;
|
||||||
|
_lastMousePosition = e.GetPosition(this);
|
||||||
|
|
||||||
|
// 捕获鼠标到选择矩形
|
||||||
|
SelectionRectangle.CaptureMouse();
|
||||||
|
e.Handled = true;
|
||||||
|
|
||||||
|
System.Diagnostics.Debug.WriteLine("SelectionRectangle mouse capture started");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SelectionRectangle_MouseMove(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (!_isAdjusting || !_isMoving || _activeControlPoint != ControlPointType.Move) return;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var currentPosition = e.GetPosition(this);
|
||||||
|
var delta = currentPosition - _lastMousePosition;
|
||||||
|
|
||||||
|
// 移动整个选择区域
|
||||||
|
var newRect = _currentSelection;
|
||||||
|
newRect.X += delta.X;
|
||||||
|
newRect.Y += delta.Y;
|
||||||
|
|
||||||
|
// 确保选择区域不会移出屏幕边界
|
||||||
|
var screenBounds = new Rect(0, 0, ActualWidth, ActualHeight);
|
||||||
|
if (newRect.Left < 0) newRect.X = 0;
|
||||||
|
if (newRect.Top < 0) newRect.Y = 0;
|
||||||
|
if (newRect.Right > screenBounds.Right) newRect.X = screenBounds.Right - newRect.Width;
|
||||||
|
if (newRect.Bottom > screenBounds.Bottom) newRect.Y = screenBounds.Bottom - newRect.Height;
|
||||||
|
|
||||||
|
_currentSelection = newRect;
|
||||||
|
UpdateSelectionDisplay();
|
||||||
|
|
||||||
|
_lastMousePosition = currentPosition;
|
||||||
|
e.Handled = true;
|
||||||
|
|
||||||
|
// 添加调试信息
|
||||||
|
System.Diagnostics.Debug.WriteLine($"SelectionRectangle moving: delta=({delta.X}, {delta.Y}), newRect=({newRect.X}, {newRect.Y}, {newRect.Width}, {newRect.Height})");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// 如果出现异常,停止移动
|
||||||
|
System.Diagnostics.Debug.WriteLine($"SelectionRectangle move error: {ex.Message}");
|
||||||
|
_isMoving = false;
|
||||||
|
_activeControlPoint = ControlPointType.None;
|
||||||
|
SelectionRectangle.ReleaseMouseCapture();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SelectionRectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||||
|
{
|
||||||
|
if (_isMoving && _activeControlPoint == ControlPointType.Move)
|
||||||
|
{
|
||||||
|
_isMoving = false;
|
||||||
|
_activeControlPoint = ControlPointType.None;
|
||||||
|
SelectionRectangle.ReleaseMouseCapture();
|
||||||
|
e.Handled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void ResetSelectionState()
|
private void ResetSelectionState()
|
||||||
{
|
{
|
||||||
// 重置所有选择相关的状态
|
// 重置所有选择相关的状态
|
||||||
@@ -724,6 +808,12 @@ namespace Ink_Canvas
|
|||||||
ReleaseMouseCapture();
|
ReleaseMouseCapture();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 释放选择矩形的鼠标捕获
|
||||||
|
if (SelectionRectangle.IsMouseCaptured)
|
||||||
|
{
|
||||||
|
SelectionRectangle.ReleaseMouseCapture();
|
||||||
|
}
|
||||||
|
|
||||||
// 重置选择区域
|
// 重置选择区域
|
||||||
_currentSelection = new Rect();
|
_currentSelection = new Rect();
|
||||||
SelectedArea = null;
|
SelectedArea = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user