こんにちは、
WPF ウィンドウ内でグリッド パネルを移動 (ドラッグ) するにはどうすればよいですか? グリッド パネルには、位置、場所、または X および Y 座標のプロパティはありません。私が見ているのは、マウスを使用してグリッドパネルを現在の場所から新しい場所に移動し、その下に「埋もれている」コントロールが表示されるようにすることだけです。
ポインタはありますか?
どうもありがとう。
開始するためのコード例を次に示します。
XAML の場合:
グリッドを作成し、レンダリング トランスフォームを定義します。
<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>
</Grid>
グリッドが移動するコントロールに名前を付けます。
<Window x:Name="window" ...>
<Grid x:Name="grid"...
</Window>
コードビハインド:
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();
}
グリッドパネルをウィンドウに直接配置するのではなく、キャンバス内に配置するだけです。これにより、グリッドパネルにX/Y座標が与えられます。
次に、ここで詳しく説明されているようなカスタムの添付プロパティを使用して、ドラッグアンドドロップ動作を実装できます(http://www.deepcode.co.uk/archive/2008/11/16/using-attached-properties-to-compose-new -behaviour.aspx)
public void dragme(object sender, MouseButtonEventArgs e)
{
if (_Move.IsChecked == true)
db.Attach((DependencyObject)sender);
}
//// MouseDragElementBehavior db;
private void canvass_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (_Move.IsChecked == true && filmgrid.Visibility == Visibility.Visible)// == true)
{
filmgrid.PreviewMouseDown += new MouseButtonEventHandler(dragme);
}
}