WPF - определяет, когда UserControl больше не виден, и запрашивает пользователя - PullRequest
0 голосов
/ 23 августа 2010

Итак, у меня есть класс, который выглядит следующим образом:

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 Ответ

1 голос
/ 23 августа 2010

Я не думаю, что можно отменить источник (событие), как вы хотите.Рассмотрим эту строку кода - EditorUserControl.Visibility = Visisibility.Hidden;

Это также вызовет событие IsVisibleChanged, но нет способа отменить одну строку кода.

ВашЕдинственный вариант - переместить логику внутри обработчика события IsVisibleChanged в метод, который будет вызываться соответствующим образом приложением.Например, если вы закрываете окно, то в обработчике события window_closing вы вызываете метод, а если результат - Button.Cancel, то вы отменяете событие закрытия.Если вы изменяете вкладки, вы обрабатываете событие SelectionChanged и снова вызываете метод, а если вам нужно отменить, тогда вы возвращаете выбранный индекс вкладки к предыдущему значению и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...