Вопрос по wpf, wpf-controls, .net, drag-and-drop, tabcontrol – Изменение порядка вкладок в WPF TabControl

14

Есть ли простой способ настроить WPF TabControl так, чтобы он поддерживал перетаскивание TabItem - подобно тому, как это делают IE и Firefox.

Ваш Ответ

1   ответ
20

Беа Штольниц существующие помощники дляПеретаскивание в ItemsControl, Она имеет некоторые ограничения, как она упоминает, но это отличное место для начала и, вероятно, будет работать так же, как и для большинства всех функциональных возможностей, которые вам потребуются.

После импорта ее классов DragDropHelper и Adorner их очень легко использовать сTabControl (Так как он является потомком ItemsControl).

Установка простого шаблона перетаскивания и свойства TabControl - все, что нам нужно. Поскольку решение настроено для обработки перетаскивания связанных с данными элементов, если ваши вкладки статически объявлены в XAML вместо использования TabControl.ItemsSource, вы можете просто привязать их DataContext к себе.

<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>

альтернативный текст http://i27.tinypic.com/xc7okg.png

Bea Stollnitz & apos; содержимое блога доступно через интернет-архивWayback Machine.
Хороший ответ, возможно, захотите обновить ваши ссылки, хотя. Они мертвы.

Похожие вопросы