在 Avalonia 中实现 TreeView 节点的拖放

     2023-03-31     117

关键词:

【中文标题】在 Avalonia 中实现 TreeView 节点的拖放【英文标题】:Implementing drag and drop for TreeView nodes in Avalonia 【发布时间】:2017-11-10 13:03:56 【问题描述】:

如何在TreeView控件中实现拖放行为?一个例子是文件浏览器,用户可以通过拖动将文件从一个文件夹移动到另一个文件夹。

我的 XAML 中有以下代码:

<TreeView Items="Binding RootFiles">
   <TreeView.ItemTemplate>
     <TreeDataTemplate ItemsSource="Binding Files">
         <TextBlock Text="Binding Name"/>
     </TreeDataTemplate>
   </TreeView.ItemTemplate>
</TreeView>

如何使节点可拖动?

【问题讨论】:

【参考方案1】:

很遗憾,我们还没有适当的拖放支持,因此您必须手动实现它。

我将描述我是如何为你的案例做了类似的改编的。

您可以在 TreeView 控件级别处理鼠标事件。当MouseDown触发时,你需要检查PointerOverElement属性来检测鼠标当前是否在树的某个节点内(使用Parent属性遍历树或简单地检查DataContext),如果是,你需要保存在某处说节点。 当按下鼠标按钮之一时触发MouseMove 事件时,您需要捕获鼠标,此时您的代码处于“拖动”状态。您可以更改 TreeView 的 Cursor 属性以向用户提供一些反馈 当MouseUp被触发时,需要检测光标相对于其他节点的位置,并在支持TreeView的模型中做出相应的改变。

【讨论】:

WPF treeview:如何在资源管理器中实现键盘导航?

】WPFtreeview:如何在资源管理器中实现键盘导航?【英文标题】:WPFtreeview:howtoimplementkeyboardnavigationlikeinExplorer?【发布时间】:2011-04-1608:23:49【问题描述】:我是第一次使用WPF树视图,我对它所做的所有基本操作感到惊讶不。其... 查看详情

Avalonia 中的 GetTemplateChild / TemplatePart?

】Avalonia中的GetTemplateChild/TemplatePart?【英文标题】:GetTemplateChild/TemplatePartinAvalonia?【发布时间】:2021-12-2700:00:03【问题描述】:在WPF中,您将声明XAML控件以供TemplatePart代码隐藏使用,然后使用GetTemplateChild获取对这些控件的引... 查看详情

unityshadersandeffectscookbook(7-2)surfaceshader中实现顶点动画(代码片段)

上一节中说了,在SurfaceShader中,添加顶点函数,我们可以在顶点函数中获取到顶点数据,比如顶点颜色、顶点坐标等。这一节学习获取顶点坐标,并且修改顶点坐标,来实现顶点动画。简单介绍原理:... 查看详情

在windows10应用程序中实现树视图(代码片段)

...实现树视图的解决方案答案正如它在qazxswpoi中描述的那样TreeView是一种分层列表模式,包含包含嵌套项的展开和折叠节点。嵌套项可以是其他节点或常规列表项。您可以使用ListView构建树视图来说明UI中的文件夹结构或嵌套关系。... 查看详情

在 Network Simulator ns2 中实现用于 Delaunay 三角剖分的 Boyer Watson 算法

】在NetworkSimulatorns2中实现用于Delaunay三角剖分的BoyerWatson算法【英文标题】:ImplementingBoyerWatsonalgorithmforDelaunayTriangulationinNetworkSimulatorns2【发布时间】:2021-10-1719:34:43【问题描述】:我想在NetworkSimulatorns2中实现Delaunay三角剖分。... 查看详情

如何在 laravel 中实现 vuetify?

】如何在laravel中实现vuetify?【英文标题】:Howtoimplementvuetifyinlaravel?【发布时间】:2018-07-2123:32:58【问题描述】:我是vuetify的新手,我试图在laravel中实现它。有人已经在laravel中实现了vuetify,可以告诉我怎么做吗?我已经安装... 查看详情

“将大小分配给...”在 Gtk.ScrolledWindow 中使用 Gtk.TreeView 时出现 GTK 警告

】“将大小分配给...”在Gtk.ScrolledWindow中使用Gtk.TreeView时出现GTK警告【英文标题】:"Allocatingsizeto..."GTKWarningwhenusingGtk.TreeViewinsideGtk.ScrolledWindow【发布时间】:2018-02-2511:11:55【问题描述】:我在GTK3应用程序中收到以下警告... 查看详情

在对象中实现二分查找

】在对象中实现二分查找【英文标题】:Implementbinarysearchinobjects【发布时间】:2010-10-2811:12:02【问题描述】:有没有办法在带有对象的ArrayList中实现二进制搜索?在此示例中,ArrayList将使用字段“id”进行排序。classUserpublicintid;p... 查看详情

在 iOS 中实现收藏按钮

】在iOS中实现收藏按钮【英文标题】:ImplementingafavoritebuttoniniOS【发布时间】:2018-11-0402:09:09【问题描述】:我正在尝试在应用程序中实现一个收藏按钮,这是我的尝试。这是我目前拥有的:letfavoriteButton:UIButton=letbutton=UIButton(typ... 查看详情

在 VBA 中实现接口的事件

】在VBA中实现接口的事件【英文标题】:Implementinginterface\'seventinVBA【发布时间】:2019-02-2713:19:00【问题描述】:我有一个界面IView:OptionExplicitPublicEventOnClientSelected()PublicPropertyGetClientNames()AsVariantEndProperty(...)但我无法在我的用户... 查看详情

在 Typescript 中实现 Bull Queue

】在Typescript中实现BullQueue【英文标题】:ImplementingBullQueueinTypescript【发布时间】:2020-11-0317:37:27【问题描述】:我尝试在Typescript和NestJS中实现Bull队列,我的代码:@Injectable()exportclassMailServiceconstructor(@InjectQueue(\'mail\')privatereadonly... 查看详情

如何在android中实现BottomAppBar?

】如何在android中实现BottomAppBar?【英文标题】:howtoimplementBottomAppBarinandroid?【发布时间】:2020-12-2823:06:46【问题描述】:如何在android中实现BottomAppBar。build.gradleimplementation\'com.google.android.material:material:1.0.0-beta01\'activity_main 查看详情

winform控件treeview只部分节点显示checkbox

WinForm控件TreeView只部分节点显示 CheckBox 用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox属性指定那些节点显示checkbox哪些不显示,可是winform中的treeview只提供一个ShowCheckBoxes属性,要么全部节点显示check... 查看详情

如何在 Fragments 中实现 onBackPressed()?

】如何在Fragments中实现onBackPressed()?【英文标题】:HowtoimplementonBackPressed()inFragments?【发布时间】:2011-07-2320:22:18【问题描述】:有没有一种方法可以在AndroidFragment中实现onBackPressed(),类似于我们在AndroidActivity中的实现方式?由... 查看详情

在 C# 中实现 IDisposable [重复]

】在C#中实现IDisposable[重复]【英文标题】:ImplementingIDisposableinC#[duplicate]【发布时间】:2017-01-2123:46:36【问题描述】:我正在尝试在示例程序中实现IDisposable。如果我在using块语句中使用SqlConnection类,它会自动处理它。publicinttestC... 查看详情

在android中实现手绘裁剪

】在android中实现手绘裁剪【英文标题】:implemantingfreehandcropinandroid【发布时间】:2012-10-0309:33:12【问题描述】:我正在尝试使用画布在android中实现徒手裁剪。我使用drawPath并将其存储在List中并在画布路径中绘制好,喜欢这个但... 查看详情

是否可以在一个堆栈中实现多个队列?

】是否可以在一个堆栈中实现多个队列?【英文标题】:IsitpossibletoimplementmultiplequeuesinaStack?【发布时间】:2021-12-2114:05:18【问题描述】:谁能给我解释一下如何在一个堆栈中实现多个队列//implementstacksusingplainarrayswithpushandpopfuncti... 查看详情

在 UICollectionViewController (Swift 4) 中实现 UISearchBarController?

】在UICollectionViewController(Swift4)中实现UISearchBarController?【英文标题】:ImplementUISearchBarControllerwithinUICollectionViewController(Swift4)?【发布时间】:2018-03-2217:33:39【问题描述】:我正在尝试在UICollectionViewController中实现UISearchBarCon 查看详情