WPF Treeview HierarchicalDataTemplate拖放

时间:2009-11-24 23:41:38

标签: wpf treeview drag hierarchicaldatatemplate

我在wpf中有一个使用下面的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>

1 个答案:

答案 0 :(得分:4)

我使用此site上的技术进行常规拖放。

树视图可能会变得混乱,如果您想知道哪个节点是 preivewMouseDown ,那么使用它作为拖动项目就可以最终走在可视化树上了。有一些代码可以做here。另一种方法是子类treeview和treeviewitem,然后你可以在每个树视图项上覆盖预览鼠标,并告诉你派生的父树视图,它可以将树视图项设置为选定项。