Mvvm在窗口中拖动网格

本文关键字:拖动 网格 窗口 Mvvm | 更新日期: 2023-09-27 18:03:48

我找到了一个解决方案,允许在窗口中拖动网格。但我用的是MVVM。如何在MVVM中实现?我需要用什么?内容控制还是别的什么?

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

Mvvm在窗口中拖动网格

这里不需要使用MVVM。如果你想移动物体并从鼠标/窗口获取事件,这只能通过后面的代码来完成。
MVVM命令/RelayCommand用于模型/视图模型/视图处理。不适合鼠标,窗口交互

你可以使用输入绑定等等,但基本上你所做的是正确的方式