在两个用户控件之间拖放

时间:2009-11-25 21:33:10

标签: c# wpf treeview drag-and-drop

我有一个用户控件,其中有一个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>

我在主窗口中使用此用户控件作为流动....

<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'中拖出一个叶子节点并使用'destDevices'的叶节点 DragDrop.DoDragDrop。 Draging正在启动但没有激活拖拽事件(即DragEnter / DragLeave / DragOver / Drop)。 我该如何解决这个问题?

Saquia

2 个答案:

答案 0 :(得分:1)

你的堆栈面板上有AllowDrop =“False”,我不知道这是否会阻止你放弃那个项目,但我会删除它,看看它是否有所作为。您的放置事件也在树视图项而不是树视图上,这是您想要的行为吗?或者你想放在树视图上,在这种情况下你的事件处理程序应该在那里。

Drag and Drop Tutorial

答案 1 :(得分:0)

感谢您的回复。

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

DataObject dragData = new DataObject(); DragDrop.DoDragDrop(this.devices,dragData,DragDropEffects.Link);

但现在我正在使用流动语句,现在所有拖放事件都在解雇...

DragDrop.DoDragDrop(this.devices,treeViewItem,DragDropEffects.Move);

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

再次感谢

Saquia