WPF - 当UserControl不再可见时检测并提示用户

时间:2010-08-23 10:59:47

标签: wpf events user-interface

所以,我有一个课程,如下:

public class EditorUserControl : UserControl
{

    public EditorUserControl()
        : base()
    {
        this.IsVisibleChanged += new DependencyPropertyChangedEventHandler(
            EditorUserControl_IsVisibleChanged);
    }

    void EditorUserControl_IsVisibleChanged(
        object sender, 
        DependencyPropertyChangedEventArgs e)
    {
        if (IsEditing && !((bool)e.NewValue))
        {
            PressedButton pressedButton = PromptUser(new Buttons[] { 
                "Save changes to the object you just edited?",
                Buttons.Yes, 
                Buttons.No, 
                Buttons.Cancel });
            if(pressedButton == Buttons.Cancel)
            {
                CANCELTHETHING();
            }
        }
    }
}

用文字表示 - 这个类是所有实体编辑控件的基础,当它不可见时(例如窗口关闭,标签更改等)我需要检查用户是否进行了更改并提示用户是否保存/丢弃/取消。保存/丢弃很容易。问题在于第三个选项(它必须在那里) - 我无法找到一种方法如何取消导致可见性发生变化的源事件(因为无法获得该实际事件)。有没有更好的方法来执行此功能(不需要注册所有可能的事件来源)?

1 个答案:

答案 0 :(得分:1)

我认为不可能取消源(事件)。 考虑这行代码 - EditorUserControl.Visibility = Visisibility.Hidden;

这也会导致IsVisibleChanged事件触发,但无法取消一行代码。

您唯一的选择是将IsVisibleChanged事件处理程序中的逻辑移动到应用程序将适当调用的方法。例如,如果关闭窗口然后在window_closing事件处理程序中调用方法,如果结果是Button.Cancel,则取消关闭事件。如果更改选项卡,则处理SelectionChanged事件并再次调用方法,如果需要取消,则将选定的选项卡索引设置回先前的值等。