2012-05-24 15 views
9

È possibile riorganizzare gli elementi di tabulazione nel controllo a schede in fase di esecuzione? Ad esempio, ho 3 elementi di tabulazione che riguardano le auto e 4 schede di casa. Voglio essere in grado di riordinarle usando il drag and drop. È possibile o è qualcosa di fantastico?È possibile riorganizzare gli elementi di tabulazione nel controllo struttura a schede in wpf?

I Tab Controllo è XAML.

<TabControl x:Name="tc" Visibility="Collapsed" GotFocus="Focus" AllowDrop="True" > 
      </TabControl> 

Gli elementi di tabulazione saranno aggiunti in runtime. Grazie per l'aiuto!

risposta

19

ha trovato una soluzione nel forum MSDN.

Ecco il link:

DragDrop TabItem

ecco la soluzione:

C# soluzione di codice

WPF:

<TabControl> 
    <TabControl.Resources> 
     <Style TargetType="TabItem"> 
      <Setter Property="AllowDrop" Value="True"/> 
       <EventSetter Event="PreviewMouseMove" Handler="TabItem_PreviewMouseMove"/> 
       <EventSetter Event="Drop" Handler="TabItem_Drop"/> 
     </Style> 
    </TabControl.Resources> 

    <TabItem Header="Tabitem 1"/> 
    <TabItem Header="Tabitem 2"/> 
    <TabItem Header="Tabitem 3"/> 
    <TabItem Header="Tabitem 4"/> 
    <TabItem Header="Tabitem 5"/> 
</TabControl> 

C# codice:

private void TabItem_PreviewMouseMove(object sender, MouseEventArgs e) 
{ 
    var tabItem = e.Source as TabItem; 

    if (tabItem == null) 
     return; 

    if (Mouse.PrimaryDevice.LeftButton == MouseButtonState.Pressed) 
    { 
     DragDrop.DoDragDrop(tabItem, tabItem, DragDropEffects.All); 
    } 
} 


private void TabItem_Drop(object sender, DragEventArgs e) 
{ 
    var tabItemTarget = e.Source as TabItem; 

    var tabItemSource = e.Data.GetData(typeof(TabItem)) as TabItem; 

    if (!tabItemTarget.Equals(tabItemSource)) 
    { 
     var tabControl = tabItemTarget.Parent as TabControl; 
     int sourceIndex = tabControl.Items.IndexOf(tabItemSource); 
     int targetIndex = tabControl.Items.IndexOf(tabItemTarget); 

     tabControl.Items.Remove(tabItemSource); 
     tabControl.Items.Insert(targetIndex, tabItemSource); 

     tabControl.Items.Remove(tabItemTarget); 
     tabControl.Items.Insert(sourceIndex, tabItemTarget); 
    } 
} 
+0

Potete per favore darmi il codice in C#, sarà apprezzato. Grazie. –

+0

Il codice è ora in C#. Questa soluzione funziona per me. – csteinmueller

+0

Questo codice funziona correttamente quando Tab Item è vuoto, ma il mio elemento di tabulazione ha User Control in cui ci sono molti elementi dell'interfaccia utente. Anche io posso mettere il cursore in TextBox mi sta dando errore. Il clic del mouse funziona in ogni elemento dell'interfaccia utente che non è quello che voglio. spero di poterti spiegare. –