2010-08-23 11 views
5

Uygulamam için çok basit bir “sürükle” mekanizması uygulamak için (bir 'ebeveyn' tuvalinin içine yerleştirilmiş çok sayıda kanveden oluşur) aşağıdaki bitler ile geldim kod:WPF'de sürüklenebilir tuvali 'Thumb' Kullanarak

(sadece ilgili bitlerini Gösterilen kaydetmek için boşluk)

MainWindow.xaml

<Canvas Name="parentCanvas" Background="#FFE8CACA"> 
     <Canvas Name="myCanvas" Height="100" Width="200" Background="#FFB4FFB4"> 
      <Thumb Name="myThumb" Canvas.Left="0" Canvas.Top="0" Background="Blue" Width="200" Height="20" DragDelta="onDragDelta" /> 
     </Canvas> 

     <!-- debug --> 
     <Button Content="Zero" Height="51" Name="button1" Width="46" Click="button1_Click" Canvas.Left="14" Canvas.Top="302" /> 
     <Label Name="pos" Width="499" Canvas.Left="77" Canvas.Top="302" Height="26" /> 
     <Label Name="changes" Height="28" Canvas.Left="77" Canvas.Top="325" Width="499" /> 
    </Canvas> 

MainWindow.xaml.cs

void onDragDelta(object sender, DragDeltaEventArgs e) 
    { 
     Canvas.SetLeft(myCanvas, e.HorizontalChange); 
     Canvas.SetTop(myCanvas, e.VerticalChange); 

     //debug info 
     pos.Content = "Left: " + Canvas.GetLeft(myCanvas) + ", Top: " + Canvas.GetTop(myCanvas); 
     changes.Content = "Horizontal: " + e.HorizontalChange + ", Vertical: " + e.VerticalChange; 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     Canvas.SetLeft(myCanvas, 0); 
     Canvas.SetTop(myCanvas, 0); 
    } 

Rasgele çalışacak gibi görünüyor! Fare hareketlerini takip ediyor gibi görünüyor, ancak tuvalin çok dengesiz hareketine neden olan DragDeltaEventArgs'u yorumlamada sorun yaşıyorum. Bunu açıklamak zor bir şey, işte burada yakaladığım kısa bir video: http://img84.imageshack.us/img84/6614/drag.mp4

Herhangi bir yorum/öneriye şükürler olsun ki, bir süredir bunun içindeyim. bu işle :(

cevap

4

Yatay ve Dikey değişiklikler geçerli konuma eklemek gerekir böylece miktarı önceki etkinliğe beri hiç hareket vardır.

Canvas.SetLeft(myCanvas, Canvas.GetLeft(myCanvas) + e.HorizontalChange); 
Canvas.SetTop(myCanvas, Canvas.GetTop(myCanvas) + e.VerticalChange); 

Ayrıca bir başlangıç ​​konumunu ayarlamak gerekir tuval aksi takdirde NaN alırsınız

<Canvas Name="myCanvas" Height="100" Width="200" Background="#FFB4FFB4" Canvas.Left="0" Canvas.Top="0"> 
+0

Şimdi anladım, açıklama için çok teşekkürler :) – Hamza

İlgili konular