我想實現使用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);
}