首页 文章

尝试更改tabControl的选定索引时出现问题

提问于
浏览
0

我面临的问题非常烦人 .

我有一个tabControl与2 tabItems(主页,显示)主页选项卡启动为可见并显示为隐藏

在Home我有一个图像,我处理MouseLeftButtonDown事件 . 此事件应更改Show TabItem的可见性并使其成为Selected .

在代码我有一个tabControl.SelectedIndex = 1;它强制tabControl SelectionChangeEvent(我用它来改变Show和Home TabItems的前景) .

我面临的问题是,它不是专注于传递给Show,而是留在Home上 . 我对代码没有任何问题,因为在SelectionChange事件处理程序的最后一步,这是我的代码执行的最后一个函数,我在ui中看到的是正确的 .

那么之后会执行什么?有人可以帮忙吗?

private void Main_clientImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)  
{  
         showMenu.Visibility = Visibility.Visible;  
         setTabSelected("showMenu");  
}   



public void setTabSelected(String name)  
{  
   for (int i = 0; i  tabControl.Items.Count ; i++)  
   {  
         TabItem item = tabControl.Items.GetItemAt(i) as TabItem;  
         if (item.Name.Equals(name))  
         {  
             selectedTab=i;  
             tabControl.SelectedIndex = i;  
             item.Foreground = new SolidColorBrush(Colors.Black);  
         }  
         else  
         {  
             item.Foreground = new SolidColorBrush(Colors.White);  
         }  
     }  
}  

private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
      for (int i = 0; i  tabControl.Items.Count; i++)
      {
          TabItem item = tabControl.Items.GetItemAt(i) as TabItem;
           if (tabControl.SelectedIndex == i)
           {
               item.Foreground = new SolidColorBrush(Colors.Black);
           }
           else
           {
               item.Foreground = new SolidColorBrush(Colors.White);
           }
       }
}

//编辑:我通过在MouseLeftButtonDown事件中添加一个简单的e.Handler = true来解决它 . 这个东西怎么了?

3 回答

  • 1

    我在方法中更改了 TabControlTabControl
    void open_Click(object sender, RoutedEventArgs e)
    并且是从 <Button Click="open_Click"<DataGrid MouseDoubleClick="open_Click" 完成的 .

    只有加入

    e.Handled = true;
    

    在方法 open_Click 的最后,它适用于 MouseDoubleClick ,正如Fotis在问题中提到的那样 .

  • 0

    你的代码有问题 .

    private void Main_clientImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)  
    {  
        showMenu.Visibility = Visibility.Visible;  
        homeMenu.Visibility = Visibility.Hidden;
        setTabSelected("showMenu");  
    }   
    
    public void setTabSelected(String name)  
    {  
        for (int i = 0; i < tabControl.Items.Count; i++)  
        {  
            TabItem item = tabControl.Items.GetItemAt(i) as TabItem;  
            if (item.Header.Equals(name))  
            {  
                selectedTab = i;  
                item.IsSelected = true; 
                item.Foreground = new SolidColorBrush(Colors.Black);  
            }
            else  
            {  
                item.Foreground = new SolidColorBrush(Colors.White);  
            }  
        }  
    }  
    
    private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        for (int i = 0; i < tabControl.Items.Count; i++)
        {
            TabItem item = tabControl.Items.GetItemAt(i) as TabItem;
            if (tabControl.SelectedIndex == i)
            {
                item.Foreground = new SolidColorBrush(Colors.Black);
            }
            else
            {
                item.Foreground = new SolidColorBrush(Colors.White);
            }
        }
    }
    

    在上面的代码中,我正在检查 item.Header.Equals(name) 并设置 item.IsSelected = true . 有时selectionindex无法正常工作 . 上面的代码应该解决您的问题 .

  • 0

    在TabControl的SelectedItem属性发生更改后,您需要确保SelectedItem.IsFocused = true . 如果不是在更改SelectedItem属性后立即使用SelectedItem.Focus() . 它对我的情况有帮助 .

相关问题