WPF: Лучший способ поднять всплывающее окно, которое является модальным для страницы?

StackOverflow https://stackoverflow.com/questions/429200

  •  06-07-2019
  •  | 
  •  

Вопрос

Я создаю приложение WPF, используя страницы стиля навигации, а не окна. Я хочу показать окно внутри страницы, это окно должно быть модальным для страницы, но разрешать пользователю переходить на другую страницу и возвращаться на ту же страницу с модальным окном в том же состоянии.

Я пробовал использовать всплывающий элемент управления WPF, но проблема в том, что элемент управления скрывается при каждом переходе от страницы. Я думаю, что я могу написать код, чтобы показать его снова, но не выглядит правильно.

Каков наилучший способ сделать это в WPF?

Это было полезно?

Решение

Это Ответ StackOverflow может помочь вам на вашем пути. Я создал пример кода, который просили другие пользователи. Я добавил это в сообщение в блоге здесь . .

Надеюсь, это поможет!

Другие советы

Почему бы просто не использовать вложенные насосы сообщений для создания модальных элементов управления

http://www.deanchalk.com / МОФ-модальных-контролей-через-dispatcherframe-вложенная-сообщение насосы /

Вы можете создать всплывающий класс, который использует слой adorner, чтобы поставить себя поверх всего остального.

Создайте базовый класс для вашего всплывающего окна со свойством IsOpen , а при его изменении установите для видимости элементов управления соответствующее значение.

Чтобы остановить элементы управления, которые находятся под щелчком во всплывающем окне, вы можете использовать всплывающее окно в полный размер страницы. Вы бы сделали его в основном прозрачным, за исключением действительной середины всплывающего окна Если вы хотите, чтобы это было полностью прозрачным, за исключением всплывающего окна, вам нужно переопределить HitTestCore в вашем всплывающем окне.

Примерно так:

protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
    // We want this control to behaive as a single rectangle and we don't much care
    // whether or it has a solid background.  So we override this method so we can have    // mouse over info for the entire panel regardless of background.

    // run the base hit test first, because if it finds something we don't want to overrule it.
    HitTestResult result = base.HitTestCore(hitTestParameters);


    // If we didn't get a hit generate a new hit test result, because HitTestCore is never called unless
    // the mouse is over the controls bounding rectangle.
    if (result == null)
        result = new PointHitTestResult(this, hitTestParameters.HitPoint);

    return result;
}

Я надеюсь, что это может указать вам правильное направление.

Windows не любит, чтобы вы это делали - это не WPF. Используйте накладывающуюся панель и используйте свойство visible или zorder.

Википедия хорошо обсуждается.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top