如何在运行时更改wpf网格的位置

本文关键字:wpf 网格 位置 运行时 | 更新日期: 2023-09-27 18:04:29

我已经创建了一个WPF网格。该网格包含文本框和按钮控件。在这里,我想在运行时重新定位网格。它是如何可能的,请回答这个如果你知道。就像一个可移动的窗口

如何在运行时更改wpf网格的位置

我不知道你是否想在鼠标事件后或在一些不同的事件后的代码中重新定位?其次,你可以在事件/方法中改变网格边距,你想这样做,然后调用UpdateLayout()方法。下面是我对类似问题的回答:

在鼠标按下按钮前检查鼠标按下按钮后的时间

我在stackoverflow上找到了这个解决方案

<Grid x:Name="grid" Background="Blue" 
Width="100" Height="100" 
MouseDown="Grid_MouseDown" MouseMove="Grid_MouseMove" MouseUp="Grid_MouseUp">
<Grid.RenderTransform>
<TranslateTransform x:Name="tt"/>
</Grid.RenderTransform>

放置在窗口

<Window x:Name="window" ...>
<Grid x:Name="grid"...

和代码:

Point m_start;
Vector m_startOffset;
private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
m_start = e.GetPosition(window);
m_startOffset = new Vector(tt.X, tt.Y);
grid.CaptureMouse();
}
private void Grid_MouseMove(object sender, MouseEventArgs e)
{
if (grid.IsMouseCaptured)
{
    Vector offset = Point.Subtract(e.GetPosition(window), m_start);
    tt.X = m_startOffset.X + offset.X;
    tt.Y = m_startOffset.Y + offset.Y;
}
}
private void Grid_MouseUp(object sender, MouseButtonEventArgs e)
{
grid.ReleaseMouseCapture();
}