2012-04-24 27 views
5

Estoy tratando de pasar el control de WPF utilizando Canvasmover cualquier control en WPF

Ésta es la 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> 

y este es el Código

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

El el código está funcionando, pero cuando se mueve, el control se sacude.
¿Cuál es el proplem

+2

Puede tratar de explicar lo que está pasando con más detalle. – ChrisF

+0

el control se movió pero Vibra fuertemente durante los movimientos –

+1

Eche un vistazo a la clase 'System.Windows.Controls.Primitives.Thumb'. –

Respuesta

6

Cuando se llama a GetPosition se debe utilizar DropCanvas como parámetro en lugar del control. Estás viendo vibraciones porque el TextBox sigue moviéndose y necesitas algo fijo.

O bien, puede usar el MouseDragElementBehavior disponible en Expression Blend SDK para mover objetos en un contenedor.

Además, este proyecto puede ser útil para usted: 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); 
     }