Проблема при попытке изменить выбранный индекс вкладки Control - PullRequest
0 голосов
/ 19 апреля 2011

Проблема, с которой я сталкиваюсь, весьма раздражает.

У меня есть вкладка Control с 2 tabItems (Home, Show) Вкладка «Главная» начинается с «Видимый» и отображается как «Скрытый»

В Home у меня есть изображение, для которого я обрабатываю событие MouseLeftButtonDown. Это событие должно изменить видимость Show TabItem и сделать его выбранным.

В коде у меня есть tabControl.SelectedIndex = 1; который заставляет tabControl SelectionChangeEvent (который я использую, чтобы изменить передний план элементов Show и Home Tab).

Проблема, с которой я сталкиваюсь, заключается в том, что вместо того, чтобы сфокусироваться на передаче, она остается на главной. У меня нет проблем с кодом, потому что на последнем шаге обработчика события SelectionChange, который является последней функцией, выполняемой моим кодом, то, что я вижу в пользовательском интерфейсе, является правильным.

Так, что будет выполнено после этого? Кто-нибудь может помочь?


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 = true при событии MouseLeftButtonDown. Что не так с этой штукой ???

Ответы [ 3 ]

1 голос
/ 06 декабря 2013

Я изменил SelectedItem из TabControl в методе
void open_Click(object sender, RoutedEventArgs e)
и сделал это от <Button Click="open_Click" и от <DataGrid MouseDoubleClick="open_Click".

Только добавив

e.Handled = true;

в конце метода open_Click он работал для MouseDoubleClick, как упоминал Фотис в вопросе.

0 голосов
/ 22 августа 2017

После изменения свойства SelectedItem в TabControl необходимо убедиться, что SelectedItem.IsFocused = true. Если нет, просто используйте SelectedItem.Focus () сразу после изменения свойства SelectedItem. Это помогло в моем случае.

0 голосов
/ 03 июня 2012

Проблема с вашим кодом.

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. Иногда indexindex не работает должным образом. Приведенный выше код должен решить вашу проблему.

...