WPF 树形视图 层次数据模板 拖放

4

我在WPF中使用下面的XAML构建了一个TreeView。它是一个良好结构化的数据源,但我在拖放方面遇到了很多麻烦。我尝试了几种方法,但都没有成功。有人能告诉我这种操作的标准流程是什么吗?

<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个回答

4
我使用这个网站上的技术来进行一般的拖放操作。
如果您想知道您正在预览MouseDown的节点,以便将其用作拖动项,则树形视图可能会变得混乱。 您最终可能需要遍历可视化树。 这里有一些代码可以实现:这里。另一种方法是对TreeView和TreeViewItem进行子类化,然后可以在每个TreeViewItem上重写PreviewMouseDown,并告诉派生的父TreeView,这可以将TreeViewItem设置为所选项目。

问题出现在TreeView本身,我如何在鼠标按下时(节点被选中之前)获取selectedNode。此外,使用常规方法绑定会出现问题。 - Dested
你列出的 wpftutorial.net 网站真的帮了我大忙。=) - Benny Jobigan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接