2009-07-07 23 views

Antwort

20

Sie könnten mit Bea Stollnitz's vorhandenen Helfern für Dragging and Dropping in an ItemsControl verwenden oder beginnen. Es hat einige Einschränkungen, wie sie erwähnt, aber es ist ein großartiger Ort, um zu beginnen, und wird wahrscheinlich funktionieren, wie es für die meisten der Funktionalität ist, die Sie benötigen.

Nach dem Import ihrer DragDropHelper und Adorner-Klassen ist es sehr einfach, sie mit der TabControl (Da es ein Nachkomme von ItemsControl ist) zu verwenden.

Das Festlegen einer einfachen Ziehvorlage und der Eigenschaften auf der Registerkarte TabControl sind alles was wir brauchen. Da die Lösung für das Ziehen von datengebundenen Elementen eingerichtet ist, können Sie, wenn Ihre Registerkarten statisch in XAML deklariert sind, anstatt die TabControl.ItemsSource zu verwenden, den DataContext einfach an sich selbst binden.

<Window x:Class="Samples.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:dd="clr-namespace:DragDropListBox" 
    Title="Dragging TabItems" 
    Height="300" 
    Width="300"> 

<Window.Resources> 
    <DataTemplate x:Key="Local_TabItemDragTemplate"> 
     <Border CornerRadius="5" 
       BorderBrush="Black" 
       BorderThickness="2" 
       Background="DodgerBlue"> 
      <TextBlock Margin="5" 
         Text="{Binding Path=Header}" /> 
     </Border> 
    </DataTemplate> 
</Window.Resources> 

<StackPanel> 
    <TabControl dd:DragDropHelper.IsDragSource="true" 
       dd:DragDropHelper.IsDropTarget="true" 
       dd:DragDropHelper.DragDropTemplate="{StaticResource Local_TabItemDragTemplate}"> 
     <TabControl.ItemContainerStyle> 
      <Style TargetType="{x:Type TabItem}"> 
       <Setter Property="DataContext" 
         Value="{Binding RelativeSource={RelativeSource Self}}" /> 
      </Style> 
     </TabControl.ItemContainerStyle> 
     <TabItem Header="Tab 1" /> 
     <TabItem Header="Tab 2" /> 
     <TabItem Header="Tab 3" /> 
     <TabItem Header="Tab 4" /> 
    </TabControl> 
    <TabControl dd:DragDropHelper.IsDragSource="true" 
       dd:DragDropHelper.IsDropTarget="true" 
       dd:DragDropHelper.DragDropTemplate="{StaticResource Local_TabItemDragTemplate}"> 
     <TabControl.ItemContainerStyle> 
      <Style TargetType="{x:Type TabItem}"> 
       <Setter Property="DataContext" 
         Value="{Binding RelativeSource={RelativeSource Self}}" /> 
      </Style> 
     </TabControl.ItemContainerStyle> 
     <TabItem Header="Tab 5" /> 
     <TabItem Header="Tab 6" /> 
     <TabItem Header="Tab 7" /> 
     <TabItem Header="Tab 8" /> 
    </TabControl> 
</StackPanel> 

alt text http://i27.tinypic.com/xc7okg.png

+1

Gute Antwort, möchten wenn Sie Ihre Links aktualisieren. Sie sind tot. – SilverX

+0

Der Blog-Inhalt von Bea Stollnitz ist über die [Wayback Machine] des Internet-Archivs verfügbar (https://web.archive.org/web/20120620222921/http://bea.stollnitz.com/blog/?p=53). – Informagic