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

时间:2015-07-24 06:50:04

标签: c# wpf grid

我创建了一个WPF网格。该网格包含Textbox和Button控件。我想在运行时重新定位网格。如果你知道的话,请回答这个问题。就像一个可移动的窗口。

2 个答案:

答案 0 :(得分:0)

我不知道您是想在鼠标事件之后重新定位还是在某些不同事件后重新定位代码?如果第二个,您可以在事件/方法中更改网格边距,并在其后调用UpdateLayout()方法。如果首先是我对类似问题的回答:

Check time after a mousebuttondown before the mousebuttonup

答案 1 :(得分:0)

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

<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();
}