From a15e1693bd2f4f9c591e8d7ca0bcd5f65a844cd8 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Mon, 23 Mar 2026 16:57:00 +0100 Subject: [PATCH] Fix DnD page when dropping on textblocks --- .../Pages/DragAndDropPage.xaml.cs | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/samples/ControlCatalog/Pages/DragAndDropPage.xaml.cs b/samples/ControlCatalog/Pages/DragAndDropPage.xaml.cs index fad63dd512..99e319d819 100644 --- a/samples/ControlCatalog/Pages/DragAndDropPage.xaml.cs +++ b/samples/ControlCatalog/Pages/DragAndDropPage.xaml.cs @@ -51,6 +51,9 @@ namespace ControlCatalog.Pages "Bitmap", d => d.Add(DataTransferItem.Create(DataFormat.Bitmap, new Bitmap(AssetLoader.Open(new Uri("avares://ControlCatalog/Assets/image1.jpg"))))), DragDropEffects.Copy); + + AddHandlers(CopyTarget, DragDropEffects.Copy); + AddHandlers(MoveTarget, DragDropEffects.Move); } private void SetupDnd(string suffix, Action factory, DragDropEffects effects) => @@ -94,16 +97,18 @@ namespace ControlCatalog.Pages } } + dragMe.PointerPressed += DoDrag; + } + + private void AddHandlers(Control target, DragDropEffects allowedEffects) + { + DragDrop.AddDragEnterHandler(target, DragOver); + DragDrop.AddDragOverHandler(target, DragOver); + DragDrop.AddDropHandler(target, Drop); + void DragOver(object? sender, DragEventArgs e) { - if (e.Source is Control c && c.Name == "MoveTarget") - { - e.DragEffects = e.DragEffects & (DragDropEffects.Move); - } - else - { - e.DragEffects = e.DragEffects & (DragDropEffects.Copy); - } + e.DragEffects &= allowedEffects; // Only allow if the dragged data contains text or filenames. if (!e.DataTransfer.Contains(DataFormat.Text) @@ -115,14 +120,7 @@ namespace ControlCatalog.Pages async void Drop(object? sender, DragEventArgs e) { - if (e.Source is Control c && c.Name == "MoveTarget") - { - e.DragEffects = e.DragEffects & (DragDropEffects.Move); - } - else - { - e.DragEffects = e.DragEffects & (DragDropEffects.Copy); - } + e.DragEffects &= allowedEffects; if (e.DragEffects == DragDropEffects.None) return; @@ -168,11 +166,6 @@ namespace ControlCatalog.Pages DropState.Content = "Custom: " + e.DataTransfer.TryGetValue(_customFormat); } } - - dragMe.PointerPressed += DoDrag; - - AddHandler(DragDrop.DropEvent, Drop); - AddHandler(DragDrop.DragOverEvent, DragOver); } } }