gpt4 book ai didi

wpf - 是否可以在WPF的标签控件中重新排列标签项目?

转载 作者:行者123 更新时间:2023-12-04 01:38:33 25 4
gpt4 key购买 nike

是否可以在运行时重新排列选项卡控件中的选项卡项目?例如,我有3个关于汽车的选项卡项目和4个关于房屋的选项卡。我希望能够使用拖放来重新排列它们。有可能还是很棒?

我有Tab控件,这里是XAML。

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


选项卡项目将在运行时添加。
感谢您的帮助!

最佳答案

在MSDN论坛中找到了解决方案。

链接在这里:

DragDrop TabItem

解决方法如下:

C#解决方案

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#代码:

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);
}
}

关于wpf - 是否可以在WPF的标签控件中重新排列标签项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10738161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com