我面临的问题非常烦人。
我有一个带有2个tabItems的tabControl(Home,Show) “主页”选项卡以“可见”和“显示为隐藏”
开头在Home中,我有一个处理MouseLeftButtonDown事件的图像。 此事件应更改Show TabItem的可见性并将其设置为Selected。
在代码中我有一个tabControl.SelectedIndex = 1; 它强制tabControl SelectionChangeEvent(我用它来改变前景 Show和Home TabItems)。
我面临的问题是,它不是专注于传递给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来解决它。 这个东西怎么了?
答案 0 :(得分:1)
我在方法
中更改了SelectedItem
TabControl
void open_Click(object sender, RoutedEventArgs e)
并且是从<Button Click="open_Click"
和<DataGrid MouseDoubleClick="open_Click"
完成的。
仅添加
e.Handled = true;
在方法open_Click
的末尾,它适用于MouseDoubleClick
,正如Fotis在问题中提到的那样。
答案 1 :(得分: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无法正常工作。上面的代码应该解决您的问题。
答案 2 :(得分:0)
TabControl的SelectedItem属性发生更改后,您需要确保SelectedItem.IsFocused = true。如果不是在更改SelectedItem属性后立即使用SelectedItem.Focus()。它对我有帮助。