2009-11-24 116 views
4

我在wpf中使用下面的xaml构建了一个treeview。它是一个结构良好的数据源,我在拖放时遇到了很多麻烦。我尝试了几种方法,都无济于事。任何人都可以告诉我做这种事情的标准程序是什么?WPF Treeview HierarchicalDataTemplate拖放

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

回答

4

我使用这个site的技术进行一般的拖放操作。

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

+0

问题出现在TreeView本身,我如何在mousebutton down(在选择节点之前)时获得selectedNode。此外,绑定使用正常的方式搞砸了。 – Dested 2009-11-25 02:05:32

+0

您在wpftutorial.net上列出的网站确实为我省去了。 =) – 2010-10-10 07:53:52