在标准的 WPF Tab 控件中有选定选项卡更改事件吗?
在标准的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, ....
在标准的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,并通过判断其是否被选中来执行相应的操作。
在WPF标准的TabControl中,是否有选中的选项卡改变的事件?这个问题的出现原因是需要在事件的源头检查,以隔离你正在寻找的最外层TabControl。我在处理程序中尝试了以下代码使其工作:
void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.Source is TabControl) { // 当选项卡改变时执行某些操作 } }
我以为这个方法不起作用,但后来我意识到我检查的是`sender`而不是`e.Source`,或者只需添加`e.Handled = true`以防止事件冒泡。
这可能导致你不得不添加许多本来不必要的事件处理程序。