wpf

2012-04-24 21 views
5
Ben Bu XAML

wpf

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

olduğunu Canvas

kullanarak wpf denetimi taşımak için çalışıyorum

herhangi bir kontrol hareketli ve bu Kod

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

olduğunu Kod çalışıyor, ancak hareket ettiğinde, kontrol sallıyor. proplem

+2

Daha neler olup bittiğini açıklamaya çalışabilir misiniz? – ChrisF

+0

denetim taşındı ancak –

+1

hareketleri sırasında güçlü titreşim 'System.Windows.Controls.Primitives.Thumb' sınıfına bir göz atın. –

cevap

6

bunun yerine kontrol parametresi olarak DropCanvas kullanmalıdır GetPosition diyoruz nedir
. Titreşim görüyorsunuz çünkü TextBox hareket etmeye devam ediyor ve sabit bir şeye ihtiyacınız var.

Alternatif olarak, bir kapsayıcıdaki nesneleri taşımak için Expression Blend SDK içinde bulunan MouseDragElementBehavior'u kullanabilirsiniz.

Ayrıca, bu proje sizin için yararlı olabilir: 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); 
     }