C# 在两个用户控件之间拖放

C# 在两个用户控件之间拖放,c#,wpf,treeview,drag-and-drop,C#,Wpf,Treeview,Drag And Drop,我有一个用户控件,其中有一个TreeView控件作为流 <Grid> <!-- Tree View --> <TreeView Name="devices" ItemsSource="{Binding Entities}" AllowDrop="True"> <TreeView.ItemContainerStyle> <St

我有一个用户控件,其中有一个TreeView控件作为流

<Grid>

    <!-- Tree View -->

    <TreeView Name="devices" 
              ItemsSource="{Binding Entities}" AllowDrop="True">              

        <TreeView.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
                <EventSetter Event="PreviewMouseLeftButtonDown"  Handler="EventPreviewMouseLeftButtonDown"/>
                <EventSetter Event="Drop"  Handler="EventDrop"/>
                <EventSetter Event="DragOver"  Handler="EventDragOver"/>
                <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                <Setter Property="FontWeight" Value="Normal" />
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="FontWeight" Value="Bold" />
                     </Trigger>
                </Style.Triggers>

            </Style>
        </TreeView.ItemContainerStyle>

        <TreeView.ItemTemplate>

            <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
                <StackPanel Orientation="Horizontal">
                    <Image  Width="25" Height="25" Source="{Binding ImagePath}" />
                    <Button Background="Transparent"  BorderBrush="Transparent">
                        <TextBlock Text="{Binding Name}"/>
                    </Button>
                    <StackPanel.ToolTip>
                        <TextBlock Text="{Binding  Description}"/>
                    </StackPanel.ToolTip>
                </StackPanel>

            </HierarchicalDataTemplate>

        </TreeView.ItemTemplate>

    </TreeView>
</Grid>

我正在使用主窗口中的此usercontrol作为流

<StackPanel Grid.Column="0" Grid.Row="0"    Orientation="Vertical" AllowDrop="False">

<local:DevicesTreeview x:Name="srcDevices"  Height="220"/>
<local:DevicesTreeview x:Name="destDevices"     Height="220"/>

</StackPanel>

我正在尝试从'srcDevices'拖动一个叶节点,并使用 DragDrop.DoDragDrop。拖航正在启动,但没有触发拖航事件(即拖航器/拖航器/拖航器/降落)。 我怎样才能解决这个问题

Saquia

您的堆栈面板上有AllowDrop=“False”,我不知道这是否会阻止您删除其中的项目,但我会将其删除,看看是否会产生影响。此外,您的drop事件位于树状视图项而不是树状视图上,这是您想要的行为吗?或者您想在树状视图中删除,在这种情况下,您的事件处理程序应该在那里

谢谢您的回复

我已经解决了我的问题。首先,我尝试使用流动语句初始化拖放

DataObject dragData=新的DataObject(); DragDrop.DoDragDrop(this.devices、dragData、DragDropEffects.Link)

但现在我使用的是flowing语句,现在所有的拖放事件都被触发

DragDrop.DoDragDrop(this.devices、treevieItem、DragDropEffects.Move)

所以唯一的区别是我发送的第二个参数不同

再次感谢


Saquia

+1用于教程链接。这有助于解决问题。