Ответ 1
Этот fooobar.com/questions/212250/... может помочь вам на вашем пути. Я создал образец кода, который попросили другие пользователи. Я добавил это в сообщение в блоге здесь.
Надеюсь, это поможет!
Я создаю приложение WPF, используя страницы стиля навигации, а не окна. Я хочу показать окно внутри страницы, это окно должно быть модальным для страницы, но разрешить пользователю перейти на другую страницу и вернуться на ту же страницу с модальным окном в том же состоянии.
Я попытался с помощью всплывающего элемента WPF, но проблема в том, что элемент управления скрывается при каждом удалении от страницы. Я предполагаю, что я могу написать код, чтобы показать его снова, но не делает правильный выбор.
Каков наилучший способ сделать это в WPF?
Этот fooobar.com/questions/212250/... может помочь вам на вашем пути. Я создал образец кода, который попросили другие пользователи. Я добавил это в сообщение в блоге здесь.
Надеюсь, это поможет!
Почему бы просто не использовать вложенные насосы сообщений для создания модальных элементов управления.
http://www.deanchalk.com/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/
Вы можете создать всплывающий класс, который использует слой adorner, чтобы поставить себя на все остальное.
Создайте базовый класс для своего всплывающего окна, у которого есть свойство IsOpen, и когда оно изменено, установите видимость элементов управления на соответствующее значение.
Чтобы остановить элементы управления, находящиеся под кликом, вы можете сделать всплывающее окно с полным размером страницы. У вас будет это в основном прозрачным, за исключением эквалайзера, где всплывающее окно. Если вы хотите, чтобы он был полностью прозрачным execpt для всплывающего окна, вам нужно было бы переопределить 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.
Wikipedia имеет хорошее обсуждение.