首页 > 解决方案 > 多选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);
        }
    }
}

标签: c#wpfdrag-and-droptreeviewmulti-select

解决方案


推荐阅读