views:

614

answers:

2

Hi,

I have a user control which has a TreeView control in it as flowing...

<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>

I am using this usercontrol from my main window as flowing....

<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>

I am trying to draging a leaf Node from 'srcDevices' and droping on a leaf Node of 'destDevices' using DragDrop.DoDragDrop. Draging is initiating but no dragdrop event is firing (i.e. DragEnter/DragLeave/DragOver/Drop). How I can fix this problem?

Saquia

+1  A: 

You have AllowDrop="False" on your stack panel, i dont know if this will stop you dropping on items in that, but i would remove it and see if it makes a difference. Also your drop events are on the tree view item not the tree view, is this the behaviour you want? or do you want to drop on the tree view, in which case your event handlers should be there.

Drag and Drop Tutorial

Aran Mulholland
+1 for the tutorial link. It goes a long way to helping figure things out.
Dillie-O
A: 

Hi Aran,

Thanks for your reply.

I have solved my problem. First I tried to use flowing statements to initialige drag and drop...

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

But now I am using flowing statement and now all drag drop event is firing...

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

So only difference is the second parameter which I am sending is different.

Thanks again

Saquia

Saquia Naz