扩展某些TabControl的默认行为的最佳方法

时间:2011-09-19 18:11:23

标签: .net wpf tabcontrol

我在WPF应用程序中有一个自定义TabControl(注意:技术并不重要,因为它可能会改变)包含TabItems。每个TabItem都有一个文本和一个用于关闭标签的“x”按钮。

请求是为关闭功能添加一些功能,以便更改它的默认行为(简单关闭)。我需要做的只是检查屏幕内显示的某些数据是否已更改,如果是,则提示用户使用某个MessageBox通知他在该选项卡中进行了一些更改。

MessageBox将显示消息“已对数据进行了一些更改。是否要保存它们?”,并将显示以下选项:

  • 是 - 保存更改然后关闭标签;
  • 否 - 请勿保存并关闭标签;
  • 取消 - 什么都不做,不保存,不要关闭;

检测是否已对scree进行了更改是没有问题的,因为我只是在对数据进行任何更改时设置了一些属性HasChanged。

目前,我想到的唯一解决方案是扩展Control,并实现一个新的close事件。此解决方案现在可以使用,因为我只需要对选项卡行为进行一次更改。问题是我可能需要在将来以其他方式扩展功能,并且我不想在每次请求更改时扩展TabControl。

此外,我需要保持TabItem的默认行为(简单关闭)。

任何人都可以指出一些最佳解决方案,可以通过不同的行为轻松扩展,并且可以在任何.NET应用程序上移植。

谢谢。

2 个答案:

答案 0 :(得分:1)

鉴于您已经定义了自定义控件,我建议添加一个新的event,例如OnTabClos​​ing,它会在您的自定义控件关闭选项卡之前触发。这样,您可以向正在关闭的选项卡添加自定义功能,而无需继续扩展控件本身。该链接应提供您开始使用所需的所有信息。

如果您有兴趣在XAML中提供故事板动画,也可以查看Routed Events

答案 1 :(得分:0)

我建议您将关闭按钮绑定到Command。 然后该命令将调用您的逻辑并显示消息框。

我认为这比使用事件更干净,因为管理发布者和订阅者总会有一些开销。

使用命令可以灵活地控制逻辑的位置以及要调用的函数。