fix: 3D右键修复

master
Tongg 7 months ago
parent 6a7ad27f73
commit d5b8e1cd58
  1. 4
      Views/UserControl/Viewport3D.xaml
  2. 34
      Views/UserControl/Viewport3D.xaml.cs

@ -75,7 +75,7 @@
</Button>
</Grid>
<Border Grid.Row="1" x:Name="MainBorder">
<Border.ContextMenu>
<Border.ContextMenu >
<ContextMenu>
<!-- 菜单 -->
<MenuItem Header="{StaticResource ViewportRightMenuFront}" x:Name="ViewportRightMenuFront" Click="MenuItem_OnClick"/>
@ -95,7 +95,7 @@
<MenuItem Header="{StaticResource ViewportRightMenuSelectFaceKind}" x:Name="ViewportRightMenuSelectFaceKind" IsCheckable="True" Checked="MenuItem_OnChecked" Unchecked="MenuItem_OnUnchecked"/>
</ContextMenu>
</Border.ContextMenu>
<hx:Viewport3DX x:Name="Viewport3Dx" ShowCoordinateSystem="True" PreviewMouseRightButtonUp="UIElement_OnPreviewMouseRightButtonUp" PreviewMouseRightButtonDown="UIElement_OnPreviewMouseRightButtonDown">
<hx:Viewport3DX x:Name="Viewport3Dx" ShowCoordinateSystem="True" PreviewMouseRightButtonUp="UIElement_OnPreviewMouseRightButtonUp" PreviewMouseRightButtonDown="UIElement_OnPreviewMouseRightButtonDown" PreviewMouseMove="Viewport3Dx_OnPreviewMouseMove">
<hx:Viewport3DX.EffectsManager><hx:EffectsManager ></hx:EffectsManager></hx:Viewport3DX.EffectsManager>
<hx:Viewport3DX.InputBindings>
<KeyBinding Key="B" Command="hx:ViewportCommands.BackView" />

@ -172,15 +172,29 @@ public partial class Viewport3D
#endregion
#region 页面隐式交互
private System.Windows.Point _mouseDownPosition;
private bool _isDragging = false;
private void UIElement_OnPreviewMouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
if (_isDragging)
{
// 如果发生拖动,不显示菜单
_isDragging = false; // 重置拖动状态
MainBorder.ContextMenu.Visibility = Visibility.Hidden;
MainBorder.ContextMenu.IsOpen = false;
return;
}
MainBorder.ContextMenu.Visibility = Visibility.Visible;
// 未拖动时,显示右键菜单
MainBorder.ContextMenu.IsOpen = true;
// e.Handled = true; // 阻止事件继续传播
}
private void UIElement_OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
MainBorder.ContextMenu.IsOpen = false;
e.Handled = true;
_mouseDownPosition = e.GetPosition(Viewport3Dx);
_isDragging = false; // 重置拖动状态
}
#endregion
@ -189,4 +203,20 @@ public partial class Viewport3D
//ViewportData.LoadData();
ViewportManager.LoadModelByEntities(new List<Viewport3DTriangleEntity>());
}
private void Viewport3Dx_OnPreviewMouseMove(object sender, MouseEventArgs e)
{
if (e.RightButton == MouseButtonState.Pressed)
{
// 计算鼠标移动距离
var currentPosition = e.GetPosition(Viewport3Dx);
var distance = (currentPosition - _mouseDownPosition).Length;
// 判断是否达到拖动的阈值
if (distance > 5) // 阈值可根据需要调整
{
_isDragging = true; // 标记为拖动
}
}
}
}
Loading…
Cancel
Save