2011-01-26 7 views
0

私はWPF 4とVB.net 2010で作業しています。私のプロジェクトは中央に640x480グリッドのフルスクリーンウィンドウで構成されています。WPFでイメージボックスをスムーズにドラッグするには?

このプロジェクトでは、ユーザーがドラッグしてグリッド上のさまざまな場所にドロップできるさまざまなイメージボックス(アイテムに.pngイメージがあります)が必要です。

本質的には、画像ボックスがまだ見え、ユーザがそれを動かすのと同じサイズで、アイテムをクリックしてグリッドの周りにドラッグできるようにする必要があります。それは決してグリッドを離れることはできません。私はまた、オブジェクトが別のオブジェクト上にあるかどうかを判断できるようにする必要があるので、マウスボタンが離されると、ドラッグされたオブジェクトは「ドロップ」され、特定のコードブロックがトリガーされます。

どうすればよいですか?

答えて

0

あなたの「プロジェクト」に類似した何かが、私は他のプロジェクトで同様のコードを試してみたときhttp://pastie.org/1498237

// XAML 

<Window x:Class="MyProject.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="500" Width="500"> 
    <Grid> 
     <Canvas x:Name="mycanv"> 
      <Image Width="150" x:Name="myimg" Source="some_source.png"/> 
     </Canvas> 
    </Grid> 
</Window> 

//C# 

private Point mouseClick; 
private double canvasLeft; 
private double canvasTop; 
public Window1() 
{ 
    InitializeComponent(); 
    foreach (object obj in mycanv.Children) 
    { 
     try 
     { 
      Image img = (Image)obj; 
      img.PreviewMouseDown += new MouseButtonEventHandler(myimg_MouseDown); 
      img.PreviewMouseMove += new MouseEventHandler(myimg_MouseMove); 
      img.PreviewMouseUp += new MouseButtonEventHandler(myimg_MouseUp); 
      img.TextInput += new TextCompositionEventHandler(myimg_TextInput); 
      img.LostMouseCapture += new MouseEventHandler(myimg_LostMouseCapture); 
      img.SetValue(Canvas.LeftProperty, 0.0); 
      img.SetValue(Canvas.TopProperty, 0.0); 
     } 
     catch 
     { 
      //do something 
     } 
    } 
} 

void myimg_LostMouseCapture(object sender, MouseEventArgs e) 
{ 
    ((Image)sender).ReleaseMouseCapture(); 
} 

void myimg_TextInput(object sender, TextCompositionEventArgs e) 
{ 
    ((Image)sender).ReleaseMouseCapture(); 
} 

void myimg_MouseUp(object sender, MouseButtonEventArgs e) 
{ 
    ((Image)sender).ReleaseMouseCapture(); 
} 

void myimg_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (((Image)sender).IsMouseCaptured) 
    { 
     Point mouseCurrent = e.GetPosition(null); 
     double Left = mouseCurrent.X - canvasLeft; 
     double Top = mouseCurrent.Y - canvasTop; 
     ((Image)sender).SetValue(Canvas.LeftProperty, canvasLeft + Left); 
     ((Image)sender).SetValue(Canvas.TopProperty, canvasTop + Top); 
     canvasLeft = Canvas.GetLeft(((Image)sender)); 
     canvasTop = Canvas.GetTop(((Image)sender)); 
    } 
} 

void myimg_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    mouseClick = e.GetPosition(null); 
    canvasLeft = Canvas.GetLeft(((Image)sender)); 
    canvasTop = Canvas.GetTop(((Image)sender)); 
    ((Image)sender).CaptureMouse(); 
} 
+0

からC#​​

を使用して、マウスの位置とオブジェクトの位置との間に不一致がありますオブジェクトは640x480グリッド内にあり、通常は解像度が大きいためです。これを回避するにはどうすればよいですか? – CodeMouse92

関連する問題