Должно ли событие перетаскивания работать таким образом и является ли это ошибкой,
или мне здесь не хватает какой-либо декларации или определения?
Ничего не происходит при попытке перетащить на страницу любой элемент с поддержкой перетаскивания. Все событие перетаскивания не срабатывает с самого начала. Я не могу проверить, срабатывает ли событие drop, потому что для этого мне сначала нужно перетащить, чтобы оно сработало.
Это файл->новое приложение MAUI без пакетов, ничего не установленного и ничего не измененного, за исключением добавления элементов перетаскивания с помощью GestureRecouncers и методов событий в коде C#/позади.
MainPage.xaml
<ContentPage xmlns = "http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
x:Class = "MauiApp1.MainPage">
<ScrollView>
<VerticalStackLayout
Padding = "30,0"
Spacing = "25">
<Image
Source = "dotnet_bot.png"
HeightRequest = "185"
Aspect = "AspectFit"
SemanticProperties.Description = "dot net bot in a race car number eight" />
<Label
Text = "Hello, World!"
Style = "{StaticResource Headline}"
SemanticProperties.HeadingLevel = "Level1" />
<Label
Text = "Welcome to .NET Multi-platform App UI"
Style = "{StaticResource SubHeadline}"
SemanticProperties.HeadingLevel = "Level2"
SemanticProperties.Description = "Welcome to dot net Multi platform App U I" />
<VerticalStackLayout>
<Border Margin = "20"
HorizontalOptions = "Fill"
BackgroundColor = "#FFAAAA"
HeightRequest = "128"
x:Name = "DroppableBorder">
<Border.GestureRecognizers>
<DropGestureRecognizer AllowDrop = "True"
Drop = "DropGestureRecognizer_Drop"/>
</Border.GestureRecognizers>
</Border>
<Label Text = "Drag Me"
HorizontalTextAlignment = "Center"
TextColor = "Black"
FontSize = "36"
x:Name = "DraggableLabel">
<Label.GestureRecognizers>
<DragGestureRecognizer CanDrag = "True"
DragStarting = "DragGestureRecognizer_DragStarting"/>
</Label.GestureRecognizers>
</Label>
</VerticalStackLayout>
</VerticalStackLayout>
</ScrollView>
</ContentPage>
MainPage.xaml.cs
namespace MauiApp1;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void DropGestureRecognizer_Drop(object sender, DropEventArgs e)
{
var data = e.Data.Properties["Text"].ToString();
DroppableBorder.Content = new Label
{
Text = data
};
}
private void DragGestureRecognizer_DragStarting(object sender, DragStartingEventArgs e)
{
e.Data.Properties.Add("Text", DraggableLabel.Text);
}
}
У меня нет проблем с другими жестами, такими как PanGestureRecogniser. Выполняются события fire и действия метода. Это не относится к жестам Drag-Drop.
Я протестировал ваш код, и он может перетаскивать и вызывать событие, как и ожидалось, в .NET 8. Обратите внимание, что жест перетаскивания инициируется длительным нажатием, за которым следует перетаскивание.
@AlexandarMay-MSFT Я не долго нажимал. Теперь это кажется очевидным. Проблема решена! Большое спасибо!





Согласно документации: Распознайте жест перетаскивания:
Жест перетаскивания инициируется длительным нажатием, за которым следует перетаскивание.
Поэтому вам нужно долго нажимать, чтобы вызвать перетаскивание.
из любопытства вы просматривали этот документ MS Learn.microsoft.com/en-us/dotnet/maui/fundamentals/gestures/…