2011-04-19 56 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()。它幫助我的情況。

相關問題