尝试更改tabControl的选定索引时出现问题

本文关键字:索引 问题 tabControl | 更新日期: 2023-09-27 17:50:30

我面临的问题相当恼人。

我有一个有2个tabitem (Home,Show)的tabControl

Home选项卡开始时为可见,显示时为隐藏

在家里我有一个图像,我处理MouseLeftButtonDown事件。这个事件应该改变Show TabItem的可见性,使它成为Selected。

在代码中我有一个tabControl。selecteindex = 1;它强制tabControl SelectionChangeEvent(我用来改变前景

我面临的问题是,焦点不是传递给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来解决它。这东西怎么了?

尝试更改tabControl的选定索引时出现问题

我在一个方法中改变了TabControlSelectedItem
void open_Click(object sender, RoutedEventArgs e)
并分别从<Button Click="open_Click"<DataGrid MouseDoubleClick="open_Click"进行了操作。

仅通过添加

e.Handled = true;

在方法open_Click的末尾,它适用于MouseDoubleClick,正如Fotis在问题中提到的。

你的代码有问题。

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

在TabControl的SelectedItem属性改变之后,您需要确保SelectedItem。IsFocused = true。如果不是,在更改SelectedItem属性后立即使用SelectedItem. focus()。