2009-07-07 20 views

Respuesta

20

Puede utilizar o comenzar a usar Bea Stollnitz's ayudantes existentes para Dragging and Dropping in an ItemsControl. Tiene algunas limitaciones, como ella menciona, pero es un gran lugar para comenzar, y probablemente funcionará como lo es para la mayoría de todas las funciones que necesitará.

Después de importar sus clases DragDropHelper y Adorner, es muy simple usarlas con el TabControl (dado que es un descendiente de ItemsControl).

Configurando una plantilla de arrastre simple, y las propiedades en el TabControl son todo lo que necesitamos. Dado que la solución está configurada para manejar el arrastre de elementos vinculados a datos, si sus pestañas están declaradas estáticamente en XAML en lugar de usar TabControl.ItemsSource, entonces puede vincular sus DataContext a sí mismos.

<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

Buena respuesta, puede ser que desee actualizar sus enlaces sin embargo. Están muertos. – SilverX

+0

El contenido del blog de Bea Stollnitz está disponible a través de [Wayback Machine] del Internet Archive (https://web.archive.org/web/20120620222921/http://bea.stollnitz.com/blog/?p=53). – Informagic

Cuestiones relacionadas