我想实现使用WPF和画布的捕捉网格。我想我的数学已经关闭了,因为UIElement不会在后台捕捉到网格。下面是我用来创建网格的xaml以及我用来尝试将UIElement对齐到最近的网格线的方法。一旦鼠标按钮事件被触发,所使用的方法就会被触发。如果这不是WPF的正确方法,是否有人能指引我朝着正确的方向发展?实现WPF捕捉网格
XAML
<Border x:Name="dragBorder"
BorderBrush="Black"
BorderThickness="1"
Margin="5"
CornerRadius="3">
<Canvas x:Name="dragCanvas"
AllowDragging="true"
AllowDragOutOfView="False"
Height="{Binding ElementName=dragBorder, Path=ActualHeight}"
Width="{Binding ElementName=dragBorder, Path=ActualWidth}">
<Canvas.Background>
<VisualBrush TileMode="Tile"
Viewport="0,0,16,16"
ViewportUnits="Absolute"
Viewbox="0,0,16,16"
ViewboxUnits="Absolute">
<VisualBrush.Visual>
<Ellipse Fill="#FF000000"
Width="2"
Height="2" />
</VisualBrush.Visual>
</VisualBrush>
</Canvas.Background>
</Canvas>
</Border>
方法
private void SnapToGrid(UIElement element)
{
double xSnap = (Canvas.GetLeft(element)/gridWidth) * gridWidth;
double ySnap = (Canvas.GetTop(element)/gridWidth) * gridWidth;
Canvas.SetLeft(element, xSnap);
Canvas.SetTop(element, ySnap);
double tempX = Canvas.GetLeft(element);
double tempY = Canvas.GetTop(element);
}