2016-04-08 12 views
0

Sürükle-bırak sıralama özelliğini uygulamamda uygulamaya çalışıyorum ve küçük bir sorun yaşıyorum. en Böyle bir şey var diyelim: Ben DragItemsStarting ve Tamamlanan olaylardan gereken tüm malzeme hallediyorumÖğeleri yalnızca bir fare kullanırken sıralamak için bırakmaya nasıl izin verilir?

<ListView ItemsSource="{x:Bind ViewModel.Source, Mode=OneWay}" 
      ScrollViewer.VerticalScrollBarVisibility="Auto" 
      CanReorderItems="True" 
      CanDragItems="True" 
      AllowDrop="True" 
      DragItemsStarting="MyList_DragItemsStarting" 
      DragItemsCompleted="MyList_OnDragItemsCompleted"/> 

ve tüm iyi çalışıyor.

sorun olsa kullanıcı (tokatlamak eylem ve malzeme gibi) dokunmatik ekranı kullanırken tetiklenir diğer bazı koduna sahip olması ve bir fare kullanırken için sürükle/bırak işlemi sadece kullanılabilir istiyorum .

İşaretçi aygıt tipine bağlı olarak değiştirebileceğim bir yer görmüyorum ve nereye bakmalıyım bilmiyorum.

Bunu yapmanın bir yolu var mı? Kimse böyle bir şey uyguladı ve bunu nasıl kodlandırabileceğini açıklayabilir mi?

Yardımlarınız için teşekkür ederiz!

Sergio

cevap

0

Yani bunun için birçok çözüm bulunmaktadır. Ama neden hep tekerleği yeniden icat ediyor. Eşyalarınız için kullanabileceğiniz güzel bir kütüphane var.

GongSolutions.WPF.DragDrop Kitaplığı, WPF için bir drag'n'drop framework'dür ve ListView, ListBox veya ItemsControls öğeleri için kullanabilirsiniz.

<ListView ItemsSource="{Binding YourCollection}" 
    dd:DragDrop.IsDragSource="True" 
    dd:DragDrop.IsDropTarget="True" 
    dd:DragDrop.DropHandler="{Binding}" /> 

MVVM hazır ve örnek bir demo da kütüphaneyi eylemde görebileceğiniz bir yerdedir.

Bu yardımcı olur umarım.

+1

Maalesef WPF'de değil, UWP uygulamasında çalışıyorum. UWP/WinRT için çalıştığınız diğer çözümlerden bazılarını da yaptınız mı? Teşekkürler! – Sergio0694

1

Geçerli etkileşimli mod almak için UIViewSettings class kullanın ve etkinleştirmek veya böyle örneğin kendi istediği işlevini devre dışı bırakabilirsiniz:

switch (UIViewSettings.GetForCurrentView().UserInteractionMode) 
{ 
    case UserInteractionMode.Mouse: 
     listView.AllowDrop = true; 
     listView.CanDragItems = true; 
     listView.CanReorderItems = true; 
     break; 

    case UserInteractionMode.Touch: 
    default: 
     listView.AllowDrop = false; 
     listView.CanDragItems = false; 
     listView.CanReorderItems = false; 
     break; 
} 

"liste görünümü" XAML kodunda tanımlanan ListView adıdır. Bu kodu örneğin, Nokta ListView'un üzerine veya Sayfa yüklenirken veya başka bir zaman olduğunda kullanabilirsiniz.

+0

Bu harika görünüyor! Ancak, uygulama hem fare hem de dokunmatik ekranlı bir cihazda çalışıyorsa ne olur? Öğelerin yalnızca kullanıcı fareyi kullanarak onları sürüklemeye çalıştığında sıralanmasını istiyorum, bunu uygulamak için bir yol var mı? Teşekkürler! – Sergio0694

+0

@ Sergio0694, Test etmedim, şimdi bir cihazım yok, sadece emülatör, emülatöre göre giriş modunu seçebiliriz, fakat bu kodu 'DragItemsStarting' olayının başlangıcına yerleştirmeye çalışabilir misin? Testin için sabırsızlanıyoruz. –

+0

Şu anda iyi çalışıyor gibi görünüyor - benim bilgisayarımda bir fare kullanarak çalışır ve telefonumda test ettiğimde dokunmatik ekran kullanımını (böylece sürükle işlemini iptal edebilmem için) rapor eder. Yine de bunun bir hibrid cihaz kullanırken nasıl çalışacağından emin değilim. – Sergio0694

İlgili konular