2016-04-22 19 views
1

Hiiho!私はXamarin.Formsを使ってダッシュボードビューを開発しています。UWPのXamarin.Formsドラッグ可能な要素

今、私はグリッドを並べ替えるためにアイコンをドラッグアンドドロップすることができます。しかし何らかの理由で私はUWPのドラッグイベントの視覚的表現を得られません。それらが発火する「DragStarted」イベント。ここに私のコードです

これはUWPの私のカスタムレンダラです。私のグリッド

public void InflateServices(IList<InstalledServiceModel> services) 
{ 
    int count = 0; 
    serviceBoard.Children.Clear(); 
    foreach (InstalledServiceModel service in services) 
    { 
     DashboardIcon icon = new DashboardIcon(service.Name, service.IconURL, service.Id); 

     var p = new TapGestureRecognizer(); 
     p.CommandParameter = icon; 
     p.SetBinding(TapGestureRecognizer.CommandProperty, "IconClick"); 
     icon.GestureRecognizers.Add(p); 

     icon.Holding += HandleHoldEvent; 

     serviceBoard.Children.Add(icon, count % 3, count/3); 
     count++; 
    } 
} 

を埋め

[assembly: ExportRenderer(typeof(DashboardIcon), typeof(DashboardIconRenderer))] 
namespace Paraply.Droid.Custom_Renderers 
{ 
class DashboardIconRenderer : ViewRenderer<DashboardIcon, Windows.UI.Xaml.FrameworkElement> 
    { 

     public DashboardIconRenderer() 
     { 

     } 

     protected override void OnElementChanged(ElementChangedEventArgs<DashboardIcon> e) 
     { 
      base.OnElementChanged(e); 

      if (this == null) 
       return; 
      this.CanDrag = true; 
      this.DragStarting += OnDragStarting; 
      //this.Holding += HandleHoldEvent; 
     } 

     protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) 
     { 
      base.OnElementPropertyChanged(sender, e); 

      this.CanDrag = true; 
     } 

     private void OnDragStarting(object sender, DragStartingEventArgs e) 
     { 
     //This fires 
     } 
} 

Xamarin.Formsマイcontentpage、またはそのfuncitonは今、すべてのDashboardIconがグリッドから派生するクラスです。これは次のようになります

public class DashboardIcon : Grid 
{ 
    //public event EventHandler<DashboardHoldingEventArgs> Holding; 
    //public void OnHolding(DashboardHoldingEventArgs e) { Holding(this, e); } 


    public DashboardIcon(string title, string url, int id = -1) 
    { 
     Title = title; 
     URL = url; 
     ServiceId = id; 
     /* 
     UI design 
     */ 
     HorizontalOptions = LayoutOptions.FillAndExpand; 
     VerticalOptions = LayoutOptions.FillAndExpand; 

     RowDefinitions.Add(new RowDefinition() { Height = new GridLength(0.6, GridUnitType.Star) }); 
     RowDefinitions.Add(new RowDefinition() { Height = new GridLength(0.4, GridUnitType.Star) }); 

     image = new Image() 
     { 
      Source = url, 
      HorizontalOptions = LayoutOptions.CenterAndExpand, 
      Aspect = Aspect.AspectFit 
     }; 

     text = new Label() 
     { 
      Text = title, 
      HorizontalTextAlignment = TextAlignment.Center, 
      TextColor = Color.Black 
     }; 

     Children.Add(image, 0, 0); 
     Children.Add(text, 0, 1); 
    } 

私のOnDragStarting関数はうまくいきません。しかし何らかの理由で、私がドラッグしているビューを視覚的に表現することはできません。ドロップするまでビューが私の指に従うことを期待していましたか?

+0

http://www.mrgestures.com/をチェックしてください。コンポーネント自体がうまく動作しない場合に役立つUWPの言及があります。 –

+0

カスタムレンダラを使用したUWPについてはわかりませんが、Xamarin.Formsを使用していると述べたので、クロスプラットフォーム[Pan Gesture Recognizer](https://developer.xamarin.com/guides/xamarin-フォーム/ユーザーインターフェイス/ジェスチャー/パン/)。 –

答えて

1

OnDragStartingには、たとえばe.DragUI.SetContentFromBitmap()を設定できます。ここで、ドラッグして見たいものを指定することができます(イメージはおそらく)。また、ここではthis.Opacity = 0.2;を設定して透過または非表示にすることができます。

+0

これは動作しないようです。最初に、何も指定されていなければ、デフォルトの要素がイメージとして使われると思ったのですか? 次のコードはOnDragStartingで試しています 'var bmpa = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri(this.BaseUri、" /Images/toggle_off.png ")); e.DragUI.SetContentFromBitmapImage(bmpa); ' –

+0

何が得られますか、なぜ機能しないのですか? – Matt

関連する問題