2009-11-24 118 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