在标准的 WPF Tab 控件中有选定选项卡更改事件吗?

10 浏览
0 Comments

在标准的 WPF Tab 控件中有选定选项卡更改事件吗?

在WPF中,有没有一种事件可以用来确定TabControl的选中选项卡是否发生了变化?\n我已经尝试使用TabControl.SelectionChanged,但是当选项卡内部的子项选择发生变化时,该事件会被触发多次。

0
0 Comments

在标准的WPF Tab Control中,是否有选中的选项卡改变事件(Is there Selected Tab Changed Event in the standard WPF Tab Control)这个问题的出现原因是因为有人想要在选中选项卡时触发一个事件。解决方法是在XAML中使用Selector.Selected属性。

在XAML中,可以通过以下方式触发一个事件来选中一个选项卡:

<TabControl>
    <TabItem Selector.Selected="OnTabSelected" />
    <TabItem Selector.Selected="OnTabSelected" />
    <TabItem Selector.Selected="OnTabSelected" />
    <!-- 也可以捕捉未选中的事件 -->
    <TabItem Selector.Unselected="OnTabUnSelected" />
</TabControl>

在代码中,可以使用以下方式处理选中选项卡的事件:

private void OnTabSelected(object sender, RoutedEventArgs e)
{
    var tab = sender as TabItem;
    if (tab != null)
    {
        // 这个选项卡被选中!
    }
}

不幸的是,尽管这个方法看起来很好,但在XAML中我无法使用Selected属性,只能使用IsSelected属性。

我站在改正的一方...有点。当我在VS中尝试键入上述内容时,它会给我标红线,所以我以为它是错误的。但是当我将其剪切并粘贴进去,然后盲目地按下F5,令人惊讶的是,它居然起作用了。嗯?为什么它会以那种方式起作用呢?

我如何在代码中访问"Selector.Selected"事件而不是在XAML中访问它?

_Faraz: someTabItem.AddHandler(Selector.SelectedEvent, ....

0
0 Comments

在标准的WPF Tab Control中是否有选中的标签页改变事件的问题,其原因是因为需要在选中的标签页改变时执行特定的操作。解决方法是在Tab Control中设置每个TabItem的x:Name属性,并在SelectionChanged事件中通过判断每个TabItem是否被选中来执行相应的操作。以下是解决方法的代码示例:


    
    
    

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (MyTabItem1.IsSelected)
    {
        // do your stuff
    }
    if (MyTabItem2.IsSelected)
    {
        // do your stuff
    }
    if (MyTabItem3.IsSelected)
    {
        // do your stuff
    }
}

通过设置TabItem的x:Name属性,我们可以在事件中访问每个TabItem,并通过判断其是否被选中来执行相应的操作。

0
0 Comments

在WPF标准的TabControl中,是否有选中的选项卡改变的事件?这个问题的出现原因是需要在事件的源头检查,以隔离你正在寻找的最外层TabControl。我在处理程序中尝试了以下代码使其工作:

void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.Source is TabControl)
    {
        // 当选项卡改变时执行某些操作
    }
}

我以为这个方法不起作用,但后来我意识到我检查的是`sender`而不是`e.Source`,或者只需添加`e.Handled = true`以防止事件冒泡。

这可能导致你不得不添加许多本来不必要的事件处理程序。

0