Как изменить индексы TabItem для TabControl во время выполнения? - PullRequest
2 голосов
/ 11 января 2012

У меня есть пять TabItem в моем TabControl, и мне нужно непрерывно перемещать положение каждой вкладки во время выполнения.Может кто-нибудь сказать мне, как я могу изменить индекс табуляции с одной позиции на другую позицию во время выполнения.

Спасибо,@ Nagaraju.

Ответы [ 3 ]

2 голосов
/ 11 января 2012

Если вы используете 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>

Здесь вы просто меняете позицию элемента в TabList в ViewModel, и эта позиция будет соответственно изменена ...

В вашей 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, так что не могу проверить, чтобы вы могли его перезапустить в соответствии с вашими предпочтениями.

2 голосов
/ 03 июня 2012

Используйте приведенное ниже решение:

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

Это определенно сработает, и вам придется делать это из кода позади.

1 голос
/ 11 января 2012

Вам нужно изменить коллекцию TabControl.Items. Удалите вкладку из старого положения и установите ее в новом положении.

См. Как изменить порядок TabItem в wpf TabControl

...