【发布时间】:2016-12-21 05:03:43
【问题描述】:
我的TabControl 中有五个TabItem,我需要在运行时连续移动每个选项卡的位置。谁能告诉我如何在运行时将标签索引从一个位置更改为另一个位置。
谢谢,
@nagaraju。
【问题讨论】:
标签: wpf tabcontrol tabitem
我的TabControl 中有五个TabItem,我需要在运行时连续移动每个选项卡的位置。谁能告诉我如何在运行时将标签索引从一个位置更改为另一个位置。
谢谢,
@nagaraju。
【问题讨论】:
标签: wpf tabcontrol tabitem
使用以下解决方案:
TabItem tempTab = new TabItem();
tempTab = control.Items[0] as TabItem;
control.Items[0] = control.Items[1];
control.Items[1] = tempTab;
这肯定行得通,你必须从代码后面做。
【讨论】:
如果您使用ObservableCollection,您只需更改项目在您的收藏中的位置,它将在视图中反映...
例如..
<TabControl ContentTemplate="{StaticResource ResourceKey=listView}"
ItemContainerStyle="{StaticResource ResourceKey=myTabItem}"
ItemsSource="{Binding Path=Persons}"
SelectedItem="{Binding Path=SelectedPerson}"
Style="{StaticResource ResourceKey=myTab}"
TabStripPlacement="Bottom">
<TabControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="16"
Height="16"
Margin="0,0,2,0"
Source="Themes\Water lilies.jpg" />
<TextBlock Margin="0,4,0,0"
VerticalAlignment="Center"
FontWeight="Bold"
Text="{Binding Path=Name}" />
</StackPanel>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
<Button Grid.Row="1" Width="50" Command="{Binding Path=ChangePositionCommand}"> ClickMe </Button>
在这里,您只需在 ViewModel 中更改 TabList 中项目的位置,该位置将相应更改...
如果获取数据和设置命令,我有实现......这取决于你如何做
public ICommand ChangePositionCommand { get; private set; }
public Person SelectedPerson
{
get { return selectedPerson; }
set
{
selectedPerson = value;
InvokePropertyChanged(new PropertyChangedEventArgs("SelectedPerson"));
}
}
private void ChangePosition(object obj)
{
int index = Persons.IndexOf(SelectedPerson);
if (index <= (Persons.Count-1))
{
Persons.Move(index,index+1);
}
else
{
Persons.Move(index,0);
}
}
上面的代码我给了INdex out of bound,但我离IDE很近,所以无法测试你可以根据你的需要修复它。
【讨论】:
您需要更改TabControl.Items 集合。从旧位置删除选项卡并将其设置在新位置上。
见How to change the order of the TabItem in the wpf TabControl
【讨论】: