如何在wpf中创建拖放?

时间:2020-03-02 22:31:32

标签: wpf

我想在treevieew上拖一并放下treeview拖曳

TreeView之一

<TreeView Name="tvMain" FontSize="14"  Grid.Row="2" Background="#FFF9F9F9"  >
                <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 DragDrop.DragOver="Image_DragOver" 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>

TreeView拖曳

<TreeView Name="tvMain"  FontSize="14"  Grid.Row="2" Background="#FFF9F9F9"  >
                <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}"  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>
我有两个树视图 我想在treeview中拖一,然后在wpf中拖曳treeview拖曳?

1 个答案:

答案 0 :(得分:0)

要在TreeView控件中启用拖放功能:

  1. 设置TreeView两个控件的属性AllowDrop =“ True”。
  2. 在TreeView控件中声明三个事件,即“ MouseDown”,“ MouseMove”, “ DragOver”和“ Drop”事件。

    <treeview.itemcontainerstyle>
       <style targettype="{x:Type TreeViewItem}">
         <EventSetter Event="TreeViewItem.DragOver"  Handler="treeView_DragOver"/>
         <EventSetter Event="TreeViewItem.Drop" Handler="treeView_Drop"/>
         <EventSetter Event="TreeViewItem.MouseMove" Handler="treeView_MouseMove"/> 
         <EventSetter Event="TreeViewItem.MouseDown" Handler="treeView_MouseDown"/>
      </style> 
    </treeview.itemcontainerstyle>
    
  3. 并为xaml.cs文件中的所有事件定义事件处理程序

  4. 删除代码可能会对您有所帮助。

      private void treeView_MouseMove(object sender, MouseEventArgs e)
      {
           try
           { 
              e.Effects = DragDropEffects.None;
      e.Handled = true;
      TreeViewItem TargetItem = GetNearestContainer
          (e.OriginalSource as UIElement);
      if (TargetItem != null && draggedItem != null )
      {
          _target = TargetItem;
          e.Effects = DragDropEffects.Move;
      } } catch (Exception) { }}
    
相关问题