Zol*_*dan 5 c# drag-and-drop avaloniaui avalonia
我正在尝试使用Avalonia 项目中包含的文件来实现拖放。\n由于我无法让它工作,并且我认为这可能是一种特殊情况,因此我尝试制作一个类似的示例,例如ControlCatalogStandalone中的示例。\n虽然ControlCatalogStandalone中的代码按预期工作,但我的测试应用程序中的几乎相同的代码无法正常工作。\ nControlCatalogStandalone中的相关代码属于 UserControl,在我的应用程序中它属于. 这可能是不当行为的原因吗?\n我基于Visual Studio 2019 中的NuGet 包创建了一个新的Avalonia MVVM 应用程序。 \n我也尝试了徒劳的版本。\n这是 XAML 文件:ListBoxWindowListBoxMainWindow0.9.110.10.0-preview2
<Window xmlns="https://github.com/avaloniaui"\n xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"\n xmlns:vm="clr-namespace:DragAndDropTests.ViewModels;assembly=DragAndDropTests"\n xmlns:d="http://schemas.microsoft.com/expression/blend/2008"\n xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"\n mc:Ignorable="d" Width="400" Height="200"\n x:Class="DragAndDropTests.Views.MainWindow"\n Icon="/Assets/avalonia-logo.ico"\n Title="DragAndDropTests">\n\n <Design.DataContext>\n <vm:MainWindowViewModel/>\n </Design.DataContext>\n\n <StackPanel Orientation="Vertical" Spacing="4">\n <TextBlock Classes="h1">Drag+Drop</TextBlock>\n <TextBlock Classes="h2">Example of Drag+Drop capabilities</TextBlock>\n\n <StackPanel Orientation="Horizontal"\n Margin="0,16,0,0"\n HorizontalAlignment="Center"\n Spacing="16">\n <Border BorderBrush="{DynamicResource ThemeAccentBrush}" BorderThickness="2" Padding="16" Name="DragMe">\n <TextBlock Name="DragState">Drag Me</TextBlock>\n </Border>\n <Border Background="{DynamicResource ThemeAccentBrush2}" Padding="16"\n DragDrop.AllowDrop="True">\n <TextBlock Name="DropState">Drop some text or files here</TextBlock>\n </Border>\n </StackPanel>\n </StackPanel>\n\n</Window>\nRun Code Online (Sandbox Code Playgroud)\n这是背后的代码:
\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Input;\nusing Avalonia.Markup.Xaml;\nusing System;\nusing System.Diagnostics;\n\nnamespace DragAndDropTests.Views\n{\n public class MainWindow : Window\n {\n private TextBlock _DropState;\n private TextBlock _DragState;\n private Border _DragMe;\n private int DragCount = 0;\n\n public MainWindow()\n {\n Debug.WriteLine("MainWindow");\n InitializeComponent();\n#if DEBUG\n this.AttachDevTools();\n#endif\n _DragMe.PointerPressed += DoDrag;\n\n AddHandler(DragDrop.DropEvent, Drop);\n AddHandler(DragDrop.DragOverEvent, DragOver);\n }\n\n private async void DoDrag(object sender, Avalonia.Input.PointerPressedEventArgs e)\n {\n Debug.WriteLine("DoDrag");\n DataObject dragData = new DataObject();\n dragData.Set(DataFormats.Text, $"You have dragged text {++DragCount} times");\n\n var result = await DragDrop.DoDragDrop(e, dragData, DragDropEffects.Copy);\n switch (result)\n {\n case DragDropEffects.Copy:\n _DragState.Text = "The text was copied"; break;\n case DragDropEffects.Link:\n _DragState.Text = "The text was linked"; break;\n case DragDropEffects.None:\n _DragState.Text = "The drag operation was canceled"; break;\n }\n }\n\n private void DragOver(object sender, DragEventArgs e)\n {\n Debug.WriteLine("DragOver");\n // Only allow Copy or Link as Drop Operations.\n e.DragEffects = e.DragEffects & (DragDropEffects.Copy | DragDropEffects.Link);\n\n // Only allow if the dragged data contains text or filenames.\n if (!e.Data.Contains(DataFormats.Text) && !e.Data.Contains(DataFormats.FileNames))\n e.DragEffects = DragDropEffects.None;\n }\n\n private void Drop(object sender, DragEventArgs e)\n {\n Debug.WriteLine("Drop");\n if (e.Data.Contains(DataFormats.Text))\n _DropState.Text = e.Data.GetText();\n else if (e.Data.Contains(DataFormats.FileNames))\n _DropState.Text = string.Join(Environment.NewLine, e.Data.GetFileNames());\n }\n\n private void InitializeComponent()\n {\n Debug.WriteLine("InitializeComponent");\n AvaloniaXamlLoader.Load(this);\n\n _DropState = this.Find<TextBlock>("DropState");\n _DragState = this.Find<TextBlock>("DragState");\n _DragMe = this.Find<Border>("DragMe");\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n应用程序内的拖放在ControlCatalogStandalone中运行良好 和我的应用程序中运行良好。\n在本例中,
事件的顺序为DoDrag, DragOver, DragOver, \xe2\x80\xa6 。\n \n将文件从 Windows 资源管理器拖到ControlCatalogStandalone效果很好。\n连续的事件是, , \xe2\x80\xa6, \n \n将文件从 Windows 资源管理器拖动到我的应用程序不起作用。\n此处没有调用任何预期事件。\n \n我的测试应用程序有什么问题?DropDragOverDragOverDrop
| 归档时间: |
|
| 查看次数: |
2842 次 |
| 最近记录: |