2011-04-19 38 views
0

我面对的问题非常烦人。尝试更改选项卡的选定索引时出现问题控制

我与2周的TabItems(主页,显示) 主页选项卡开始作为可见光和显示为隐藏

主页我有我处理MouseLeftButtonDown事件的图像一个TabControl。 该事件应该改变Show TabItem的可见性并将其设置为Selected。

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

我面对的问题是,而不是焦点传递给显示,它仍然在家中。 我对代码没有问题,因为在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); 
      } 
     } 
} 
 

//编辑:我通过把一个简单e.Handler =在MouseLeftButtonDown事件真正的解决了这个问题。 这件事有什么错?

+1

您是否在更改SelectedIndex之前设置了可见性?我最好的猜测是当SelectedIndex被更改时可见性被设置为隐藏,并且您不能将焦点设置为不可见项目。 – Rachel 2011-04-19 16:22:09

+0

你能发表一些代码吗?我们不知道“(我用它来改变Show和Home TabItems的前景)。”是。您是否将您试图设置为选定选项卡的选项卡的可见性设置为? – 2011-04-19 16:23:47

+0

我在我的post.Thnx上发布了代码以获取帮助。如您所见,我在更改selectedIndex之前设置了选项卡的可见性。 – Fotis 2011-04-19 16:39:45

回答

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不能正常工作。上面的代码应该解决你的问题。

1

我的方法
void open_Click(object sender, RoutedEventArgs e)
改变TabControlSelectedItem并从<Button Click="open_Click",并从<DataGrid MouseDoubleClick="open_Click"做到了。

只有通过在方法中的端open_Click它曾为MouseDoubleClick作为Fotis问题提及加入

e.Handled = true; 

0

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

相关问题