Есть ли простой способ настроить WPF TabControl, чтобы он поддерживал перетаскивание TabItem - аналогично тому, что делают IE и firefox.
Изменение порядка вкладок в WPF TabControl
Ответы (1)
Вы можете использовать или начать работу с существующими помощниками Беа Столльниц для Перетаскивание в 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>
person
rmoore
schedule
07.07.2009
Хороший ответ, возможно, вы захотите обновить свои ссылки. Они мертвы.
- person SilverX; 20.02.2013
Содержимое блога Беа Столлниц доступно через Wayback Machine.
- person Informagic; 04.12.2017
Беа Столлниц переместила сюда старые записи на github github.com/bstollnitz/ старый-wpf-блог/дерево/мастер/
- person Marcel Mateman; 18.10.2019