Wpf 切换选项卡

Wpf 切换选项卡,wpf,wpf-controls,Wpf,Wpf Controls,我的TabControl中有两个选项卡。每次用户从一个选项卡切换到另一个选项卡时,我都需要运行一个方法(检查数据是否需要保存到数据库)(切换可以是任意方向:从tab1切换到tab2,从tab2切换到tab1)。我该怎么做 我考虑过使用ButtonBase。单击附加到每个选项卡的事件,但由于某种原因它不会触发 编辑:我忘了提到我希望能够“取消”事件,以防用户决定不保存更改,并且必须“导航回”他或她试图离开的选项卡。选项卡控件的签出事件 编辑:对问题的更改 是否要取消事件或取消保存 要取消保存,只需

我的TabControl中有两个选项卡。每次用户从一个选项卡切换到另一个选项卡时,我都需要运行一个方法(检查数据是否需要保存到数据库)(切换可以是任意方向:从tab1切换到tab2,从tab2切换到tab1)。我该怎么做

我考虑过使用ButtonBase。单击附加到每个选项卡的事件,但由于某种原因它不会触发

编辑:我忘了提到我希望能够“取消”事件,以防用户决定不保存更改,并且必须“导航回”他或她试图离开的选项卡。

选项卡控件的签出事件

编辑:对问题的更改

是否要取消事件或取消保存

要取消保存,只需向用户询问以下内容:

Dim msRes as MessageResult = MessageResult.No
If mySwitchedFromTab.IsDirty Then 
      msRes = msgbox("Save changes to previous tab?", YesNo, "MyApp")
      if msRes = MessageResult.Yes Then 
          SaveMethod()
      End If 
End If
If myGlobalTabFireBoolean Then
   Dim msRes as MessageResult = MessageResult.No
   If mySwitchedFromTab.IsDirty Then 
         msRes = msgbox("Save changes to previous tab?", YesNoCancel, "MyApp")
         Select Case msRes 
             Case MessageResult.Yes 
                 SaveMethod()
             Case MessageResult.Cancel 
                 myGlobalTabFireBoolean = False
                 myTabContainer.SelectedItem = myPreviousTab
             Case Else            
                 ' Do Nothing 
         End If 
   End If
 Else
     myglobalTabFireBoolean = True 
End IF
现在要取消选项卡更改,您必须处理布尔值,控制事件处理程序中的功能是否启动,然后将所选选项卡设置回上一个选项卡,大致如下:

Dim msRes as MessageResult = MessageResult.No
If mySwitchedFromTab.IsDirty Then 
      msRes = msgbox("Save changes to previous tab?", YesNo, "MyApp")
      if msRes = MessageResult.Yes Then 
          SaveMethod()
      End If 
End If
If myGlobalTabFireBoolean Then
   Dim msRes as MessageResult = MessageResult.No
   If mySwitchedFromTab.IsDirty Then 
         msRes = msgbox("Save changes to previous tab?", YesNoCancel, "MyApp")
         Select Case msRes 
             Case MessageResult.Yes 
                 SaveMethod()
             Case MessageResult.Cancel 
                 myGlobalTabFireBoolean = False
                 myTabContainer.SelectedItem = myPreviousTab
             Case Else            
                 ' Do Nothing 
         End If 
   End If
 Else
     myglobalTabFireBoolean = True 
End IF

现在,这些并不是执行此类功能的唯一方法,因为这取决于个人编码风格,甚至还取决于您如何构建选项卡项(我构建选项卡项的选项卡要详细得多,这样我就可以覆盖它的标准行为,使它们的行为更像Firefox和IE中带有“X”的选项卡)按钮和鼠标中键单击关闭)。

如果您使用的是WPF,我不知道其中有什么,但在.NET中,TabControl对象有一个“SelectedIndexChanged”事件。假设您在designer中,只需将您想要的方法附加到该事件,您就是golden,或者通过类似以下内容的代码:

    this.rootTabControl.SelectedIndexChanged += new System.EventHandler(this.myHandlerHere);

但是我不知道WPF,所以如果它完全不同,你就靠你自己了,但我可以想象它是非常相似的。

关于我所做的编辑,再多说一点:因为这是一个专注的问答网站,而不是论坛网站,问候和介绍会妨碍你。介绍尤其糟糕,因为它们阻止人们从头版和概述中了解你的问题。这很酷,我会在未来的问题中记下这一点。这是我想到的解决方案之一。我没有使用自定义选项卡,而是使用WPF(System.Windows.Controls)中的标准TabControl。这是我唯一需要“点击检测”行为的地方,所以我不想为此创建自定义控件。