Проблема при попытке изменить выбранный индекс вкладки Control
Проблема, с которой я сталкиваюсь, довольно раздражает.
У меня есть вкладка Control с 2 tabItems(Home,Show). Вкладка Home начинается как Видимая и Показывается как Скрытая
В Home у меня есть изображение, для которого я обрабатываю событие MouseLeftButtonDown. Это событие должно изменить видимость Show TabItem и сделать его выбранным.
В коде у меня есть tabControl.SelectedIndex = 1; который заставляет tabControl SelectionChangeEvent (который я использую, чтобы изменить передний план Show и Home TabItems).
Проблема, с которой я сталкиваюсь, состоит в том, что вместо того, чтобы сфокусироваться на передаче, она остается дома. У меня нет проблем с кодом, потому что на последнем шаге обработчика события 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 ответа
Я изменил SelectedItem
из TabControl
в методеvoid open_Click(object sender, RoutedEventArgs e)
и сделал это из <Button Click="open_Click"
и из <DataGrid MouseDoubleClick="open_Click"
,
Только добавив
e.Handled = true;
в конце метода open_Click
это сработало для MouseDoubleClick
как отметил Фотис в вопросе.
Есть проблема с вашим кодом.
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 не работает должным образом. Приведенный выше код должен решить вашу проблему.
После изменения свойства SelectedItem в TabControl необходимо убедиться, что SelectedItem.IsFocused = true. Если нет, просто используйте SelectedItem.Focus() сразу после изменения свойства SelectedItem. Это помогло в моем случае.