Я пытаюсь реализовать сетку привязки, используя WPF и холст. Я думаю, что моя математика отключена, потому что UIElement не привязывается к сетке в фоновом режиме. Ниже представлен xaml, который я использую для создания сетки, и метод, который я использую, чтобы попытаться привязать UIElement к ближайшей линии сетки. Используемый метод запускается, как только запускается событие нажатия кнопки мыши. Если это не правильный подход для 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);
}