0

我面临的问题很烦人。

我有一个带有 2 个 tabItems(Home,Show) 的 tabControl 主页选项卡开始为可见并显示为隐藏

在主页中,我有一个图像,我为其处理 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 来解决它。这东西有什么问题???

4

3 回答 3

3

我更改了方法中的SelectedItemof 并从 a和从 a 进行了操作。TabControl
void open_Click(object sender, RoutedEventArgs e)
<Button Click="open_Click"<DataGrid MouseDoubleClick="open_Click"

只有通过添加

e.Handled = true;

在方法的最后,open_Click它适用MouseDoubleClick于问题中提到的 Fotis。

于 2013-12-06T13:11:02.930 回答
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 不能正常工作。上面的代码应该可以解决您的问题。

于 2012-06-03T15:00:57.233 回答
0

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

于 2017-08-22T09:08:01.033 回答