【问题标题】:How to change TabItem indices of a TabControl at runtime?如何在运行时更改 TabControl 的 TabItem 索引?
【发布时间】:2016-12-21 05:03:43
【问题描述】:

我的TabControl 中有五个TabItem,我需要在运行时连续移动每个选项卡的位置。谁能告诉我如何在运行时将标签索引从一个位置更改为另一个位置。

谢谢,
@nagaraju。

【问题讨论】:

    标签: wpf tabcontrol tabitem


    【解决方案1】:

    使用以下解决方案:

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

    这肯定行得通,你必须从代码后面做。

    【讨论】:

      【解决方案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 中项目的位置,该位置将相应更改...

      在您的视图模型中

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

      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很近,所以无法测试你可以根据你的需要修复它。

      【讨论】:

        【解决方案3】:

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

        How to change the order of the TabItem in the wpf TabControl

        【讨论】:

        • 在该示例中,为什么不考虑已删除的索引又在 0 索引处插入?
        • 它给了我错误'元素已经有一个逻辑父级。在附加到新的父级之前,它必须与旧父级分离。'
        猜你喜欢
        • 1970-01-01
        • 2020-04-05
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        • 1970-01-01
        • 1970-01-01
        • 2017-09-29
        • 1970-01-01
        相关资源
        最近更新 更多