如何在运行时更改TabControl的TabItem索引?

时间:2012-01-11 13:13:09

标签: wpf tabcontrol tabitem

我的TabItem中有五个TabControl,我需要在运行时连续移动每个标签的位置。任何人都可以告诉我如何在运行时将标签索引从一个位置更改为另一个位置。

谢谢,
@nagaraju。

3 个答案:

答案 0 :(得分:2)

如果您正在使用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项目的位置,该位置将相应更改...

在您的ViewModel

我有实现,如果获取数据和设置命令...由你如何做到

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的附近,因此根据你的意思,你可以重新获得它。

答案 1 :(得分:2)

使用以下解决方案:

TabItem tempTab = new TabItem();
            tempTab = control.Items[0] as TabItem;
            control.Items[0] = control.Items[1];
            control.Items[1] = tempTab;

这肯定会有效,你必须从背后的代码中做到。

答案 2 :(得分:1)

您需要更改TabControl.Items集合。从旧位置移除选项卡并将其设置在新位置。

请参阅How to change the order of the TabItem in the wpf TabControl