2016-05-25 10 views
0

Ich baue eine UWP-Anwendung mit C# und ich habe Probleme, die Drag UI anzupassen, wenn ich Drag & Drop für eine ListView mache.UWP ListView Benutzerdefinierte Drag Item-Benutzerschnittstelle

Ich verwende DragItemsStarting Objekt die Daten, die ich & Drop ziehen möchten zu setzen, aber dieses Ereignis ist nicht der UI anpassen.

Ich habe die DragStarting hinzugefügt, aber es wird nicht aufgerufen, so habe ich keine Chance, die Drag UI zu ändern.

Jeder hat dieses Problem gefunden? Gibt es eine Idee, wie Sie die Drag UI bei Verwendung einer ListView anpassen können?

Antwort

1

Ich bin mir nicht sicher, ob ich Sie richtig und über Ihren speziellen Fall und Anforderungen zu verstehen, aber ich würde Standard-Neuordnungs Verhalten in der Listenansicht verwenden:

<ListView x:Name="MyListView" ItemsSource="{Binding Items}" ReorderMode="Enabled" CanReorderItems="True" AllowDrop="True"> 
... 
</ListView> 

Dieser Code ermöglicht es Ihnen, bereits Artikel existiert in ListView neu zu ordnen . Zum Hinzufügen neuer Elemente per Drag & Drop müssen Sie für Drop Ereignis auf ListView abonnieren und Drop-Artikel in Ihre Artikel-Sammlung, die vom Typ ObservableCollection<YourItemType> sein sollte, und zugeordnet/ListView.ItemsSource zugewiesen werden.

Wenn Sie noch visuelles Objekt anpassen, die Sie & Drop ziehen Sie auf DragStarting Ereignis in diesem Objekt anmelden müssen und legen Sie eine beliebige UI-Element Sie wollen:

private async void OnDragStarting(UIElement sender, DragStartingEventArgs args) 
{ 
    var deferral = args.GetDeferral(); 
    args.Data.Properties.Add("ItemViewModel", DataContext); 

    var renderTargetBitmap = new RenderTargetBitmap(); 
    await renderTargetBitmap.RenderAsync(uiElementToDrag); 

    var buffer = await renderTargetBitmap.GetPixelsAsync(); 
    var bitmap = SoftwareBitmap.CreateCopyFromBuffer(buffer, 
     BitmapPixelFormat.Bgra8, 
     renderTargetBitmap.PixelWidth, 
     renderTargetBitmap.PixelHeight, 
     BitmapAlphaMode.Premultiplied); 
    args.DragUI.SetContentFromSoftwareBitmap(bitmap); 
    deferral.Complete(); 
} 

uiElementToDrag ist visuelle dragable Element vom Typ UIElement .

+0

Mein Problem ist, dass DragStarting nicht für eine Listview aufgerufen wird, wenn Sie CanDragItems = „true“ gesetzt und ich brauche DragItemsStarting zu verwenden. – ventayol

0

Vielleicht können Sie es auf die ItemTemplate tun.

<ListView> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid Background="Transparent" 
        CanDrag="True" 
        DragStarting="onDragStarting"> 
       <!--Content--> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView>