Is it possible to rearrange tab items in tab control in wpf?

后端 未结 2 1027
情书的邮戳
情书的邮戳 2021-02-04 09:39

Is it possible to rearrange tab items in tab control in run time? For example I have 3 tab items which are about cars and 4 tabs about house. I want to be able to rearrange them

2条回答
  •  粉色の甜心
    2021-02-04 10:08

    When I tried to implement this solution, the drop event was firing twice (moving the tabs but them immediately moving them back). I had to add an integer to keep track of the last tab target index. My solution is in VB.NET

    'additional variable
    Dim lastTabTargetIndex As Integer = Nothing
    
    Private Sub tc1_PreviewMouseMove(sender As Object, e As MouseEventArgs) Handles tc1.PreviewMouseMove
    
        Dim Tabi = TryCast(e.Source, TabItem)
    
        If Tabi Is Nothing Then
            Exit Sub
        Else
            If Mouse.PrimaryDevice.LeftButton = MouseButtonState.Pressed Then
                DragDrop.DoDragDrop(Tabi, Tabi, DragDropEffects.All)
            End If
        End If
    End Sub
    
    Private Sub tc1_Drop(sender As Object, e As DragEventArgs) Handles tc1.Drop
    
        Dim tabItemTarget = TryCast(e.Source, TabItem)
        Dim tabItemSource = TryCast(e.Data.GetData(GetType(TabItem)), TabItem)
    
        If Not tabItemTarget.Equals(tabItemSource) Then
            Dim tabControl = TryCast(tabItemTarget.Parent, TabControl)
            Dim sourceIndex As Integer = tabControl.Items.IndexOf(tabItemSource)
            Dim targetIndex As Integer = tabControl.Items.IndexOf(tabItemTarget)
    
            'had to use this extra statement
            If sourceIndex <> lastTabTargetIndex Then
                'assign lastTabTargetIndex here
                lastTabTargetIndex = targetIndex
                tabControl.Items.Remove(tabItemSource)
                tabControl.Items.Insert(targetIndex, tabItemSource)
                tabControl.Items.Remove(tabItemTarget)
                tabControl.Items.Insert(sourceIndex, tabItemTarget)
            End If
    
        End If
    End Sub
    

提交回复
热议问题