WPF Treeview HierarchycalDataTemplate拖放

WPF Treeview HierarchycalDataTemplate拖放,wpf,treeview,drag,hierarchicaldatatemplate,Wpf,Treeview,Drag,Hierarchicaldatatemplate,我有一个wpf中的treeview,它是使用下面的xaml构建的。它是一个结构良好的数据源,我在拖放时遇到了很多麻烦。我试过几种方法,都没有用。有人能告诉我做这类事情的标准程序是什么吗 <TreeView x:Name="_treeView" ItemsSource="{Binding}" Grid.Row="0" Grid.Column="0"> <TreeView.Resources> <Hierarc

我有一个wpf中的treeview,它是使用下面的xaml构建的。它是一个结构良好的数据源,我在拖放时遇到了很多麻烦。我试过几种方法,都没有用。有人能告诉我做这类事情的标准程序是什么吗

<TreeView x:Name="_treeView" ItemsSource="{Binding}"   Grid.Row="0" Grid.Column="0">
            <TreeView.Resources>
                <HierarchicalDataTemplate DataType="{x:Type Logic:Statement}"
                              ItemsSource="{Binding Path=PagedChildren}">
                    <TextBlock Text="{Binding StatementName}"/>
                </HierarchicalDataTemplate>

                <HierarchicalDataTemplate DataType="{x:Type Logic:StatementPage}"
                              ItemsSource="{Binding Path=Children}">
                    <WrapPanel>
                        <TextBlock Text="Page: "/>
                        <TextBlock Text="{Binding PageIndex}"/>
                    </WrapPanel>
                </HierarchicalDataTemplate>

                <DataTemplate DataType="{x:Type Logic:StatementFund}">
                    <Border  HorizontalAlignment="Left" VerticalAlignment="Top" BorderBrush="Black" BorderThickness="2" CornerRadius="25">
                        <WrapPanel Margin="30 0 30 0" Width="150" Height="150" >
                            <StackPanel>
                                <TextBlock Text="Fund"/>
                                <WrapPanel>
                                    <TextBlock Text="Fund: "/>
                                    <TextBlock Text="{Binding FundNumber}"/>
                                </WrapPanel>
                                <WrapPanel Margin="10 0 0 0">
                                    <TextBlock Text="{Binding ColumnIndex}"/>
                                </WrapPanel>
                            </StackPanel>
                        </WrapPanel>
                    </Border>
                </DataTemplate>
                <DataTemplate DataType="{x:Type Logic:StatementPreviousCycle}">
                    <Border  HorizontalAlignment="Left" VerticalAlignment="Top" BorderBrush="Black" BorderThickness="2" CornerRadius="25">
                        <WrapPanel Margin="30 0 30 0" Width="150" Height="150" >
                            <StackPanel>
                                <TextBlock Text="Previous Cycle"/>
                                <WrapPanel>
                                    <TextBlock Text="Fund: "/>
                                    <TextBlock Text="{Binding FundNumber}"/>
                                </WrapPanel>
                                <WrapPanel Margin="10 0 0 0">
                                    <TextBlock Text="{Binding ColumnIndex}"/>
                                </WrapPanel>
                            </StackPanel>
                        </WrapPanel>
                    </Border>
                </DataTemplate>

            </TreeView.Resources>
        </TreeView>

我使用这方面的技术进行常规拖放


树视图可能会变得杂乱无章,如果您想知道您将在哪个节点上进行预览,然后将其用作拖动项,您最终可以在可视化树上行走。有一些代码可以做到这一点。另一种方法是将treeview和treeview子类化,然后您可以在每个树视图项上覆盖预览鼠标,并告诉您的派生父树视图,这可以将树视图项设置为选定项。

问题在于树视图本身,如何在鼠标按钮上按下selectedNode(在选择节点之前)。此外,绑定会以正常的方式出错。您在wpftutorial.net上列出的网站真的救了我一命。=)