2012-04-24 11 views
5

Próbuję przenieść kontrolę w WPF przy użyciu Canvasprzesuwając żadnej kontroli w WPF

To XAML

<Canvas Grid.Column="1" Grid.Row="0" x:Name="DropCanvas" AllowDrop="True" DragOver="DropCanvas_DragOver" 
      Drop="Canvas_Drop" DragEnter="Canvas_DragEnter" Background="#12000000" > 
     <TextBox Canvas.Left="162" Canvas.Top="188" Height="23" Name="textBox1" Width="120" 
       PreviewMouseMove="textBox1_PreviewMouseMove" 
       PreviewMouseLeftButtonDown="textBox1_PreviewMouseLeftButtonDown" 
       PreviewMouseUp="textBox1_PreviewMouseUp" /> 
    </Canvas> 

i to jest Kodeks

Point p = new Point(); 
    private void textBox1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     Control control = sender as Control; 

     control.CaptureMouse(); 
     p = e.GetPosition(control); 
    } 

    private void textBox1_PreviewMouseMove(object sender, MouseEventArgs e) 
    {  
      Control control = sender as Control; 
      Point x = e.GetPosition(control); 
      if (e.LeftButton == MouseButtonState.Pressed) 
      { 
       Canvas.SetLeft(control, Canvas.GetLeft(control) + (x.X - p.X)); 
       Canvas.SetTop(control, Canvas.GetTop(control) + (x.Y - p.Y)); 
      } 
      p = x;   
    } 

    private void textBox1_PreviewMouseUp(object sender, MouseButtonEventArgs e) 
    { 
     Control control = sender as Control; 
     control.ReleaseMouseCapture(); 

     activated = false;   
    } 

kod działa, ale kiedy się porusza, kontrola się trzęsie.
Jaki jest proplem

+2

Czy możesz spróbować wyjaśnić, co dzieje się bardziej szczegółowo. – ChrisF

+0

Sterowanie zostało przeniesione, ale silnie wibruje podczas ruchów. –

+1

Spójrz na klasę 'System.Windows.Controls.Primitives.Thumb'. –

Odpowiedz

6

Po wywołaniu GetPosition należy użyć DropCanvas jako parametr zamiast kontroli. Widzisz wibracje, ponieważ TextBox wciąż się porusza i potrzebujesz czegoś stałego.

Alternatywnie można użyć zestawu MouseDragElementBehavior dostępnego w pakiecie SDK Expression Blend, aby przenosić obiekty w kontenerze.

Również ten projekt może być przydatna: http://www.codeproject.com/Articles/24681/WPF-Diagram-Designer-Part-4

0
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); 
     } 
Powiązane problemy