c# - 多选treeview分层数据模板,支持WPF中多个Item的拖动
问题描述
我花了几个小时寻找可能的解决方案,但找不到任何解决方案。希望有人可以帮助我。
我用分层数据模板编写了树视图,并为一个项目编写了拖放功能,因此我想使用多行进行拖放。
我还安装了 "Install-Package MultiSelectTreeView -Version 1.0.9" 。
如何通过将多个项目拖动到我的 WPF 应用程序来添加支持多项选择的树视图?
XAML:
<TreeView Name="tvMain" FontSize="14" Grid.Row="2" Background="#FFF9F9F9" AllowDrop="True" PreviewMouseLeftButtonDown="TreeViewItem_PreviewMouseLeftButtonDown"
PreviewMouseMove="TreeViewItem_PreviewMouseMove" SelectedItemChanged="tvMain_SelectedItemChanged">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="TreeView_MouseDoubleClick" />
<EventSetter Event="MouseRightButtonDown" Handler="TreeView_MouseRightClick" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate >
<StackPanel Orientation="Horizontal">
<Image Margin="2" Width="14" Height="14" Source="{Binding Path=ImageUrl}" HorizontalAlignment="Right" VerticalAlignment="Center" ></Image>
<TextBlock Margin="2" Text="{Binding Path=Name}" MinWidth="280" Width="{Binding Path=SizeOfName}" VerticalAlignment="Center" />
<TextBlock Name="lb_params" Text="{Binding Params}" Width="{Binding Path=SizeParams}" VerticalAlignment="Center" TextAlignment="Center"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
我使用这个网站上的技术进行一般的拖放。
C#:
Point startPoint;
private void TreeViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
startPoint = e.GetPosition(null);
}
private void TreeViewItem_PreviewMouseMove(object sender, MouseEventArgs e)
{
Point mousePos = e.GetPosition(null);
Vector diff = startPoint - mousePos;
if (e.LeftButton == MouseButtonState.Pressed && (Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance || Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance))
{
TreeView treeView = sender as TreeView;
if (treeView.SelectedItem != null)
{
DataObject dragData = new DataObject("myFormat", treeView.SelectedItem);
DragDrop.DoDragDrop(treeView, dragData, DragDropEffects.Move);
}
}
}
解决方案
推荐阅读
- javascript - 对象数组中上一个最接近的日期
- flutter - 无法在初始化程序中访问实例成员“currentComponentConfiguration”
- visual-studio-code - 防止 VsCode 实时服务器向上滚动
- c# - Xamarin Forms Android Accessibility for StackLayout 子 ContentView 标签文本不起作用
- excel - 根据另一个单元格的值隐藏非连续列 (Excel)
- html - I want paragraph 3 to contiune just below the image
- angular - 如何在循环中迭代组件?
- recursion - OCaml 中的递归调用
- laravel - Laravel - 当它返回时删除不显示 Flash 错误消息
- python - Robot-Framework:如何从关键字中获取列表并验证项目