Принудительное положение диалога WPF в центре окна AutoCAD или центре экрана.

Автор Тема: Принудительное положение диалога WPF в центре окна AutoCAD или центре экрана.  (Прочитано 4202 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Есть у меня небольшое окошко, которое я использую вместо стандартного Application.ShowAlertDialog. Запускаю его с помощью Application.ShowModalWindow.
AutoCAD записывает данные о положении в реестр. Если окошко сместить, то в следующий раз оно показывается уже в сохраненном месте. Мне хочется, чтобы оно было всегда по центру окна AutoCAD, на худой конец - в центре экрана. Попробовал задавать значения свойства начального положения:WindowStartupLocation="CenterOwner"илиWindowStartupLocation="CenterScreen"но это не работает. Положение окна все равно записывается в реестр.
Может быть, есть какой-то простой способ сделать так, чтобы окошко всегда запускалось в центре окна AutoCAD/экрана?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А удалять эту ветку реестра не пробовал? Или переписывать значение Bounds?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Ну я бы не назвал это простым решением :) Я подумал, может быть еще какое-то свойство задать-поменять можно, чтобы это исправить.
Если вручную удалять эту ветку, то работает. Предлагаете в коде прописать принудительное удаление ветки перед каждым запуском?

Отмечено как Решение Дмитрий Загорулькин 19-01-2017, 18:16:13

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Есть более простой способ. Использовать перегруженую сигнатуру Application.ShowModalWindow с persistSizeAndPosition равным false
Или как предложил Андрей Бушман - подписаться на событие Activated и в нём спозиционировать окно: https://www.theswamp.org/index.php?topic=43077.msg482965#msg482965
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Использовать перегруженую сигнатуру Application.ShowModalWindow с persistSizeAndPosition равным false
Это уже интересно!
Перегруженный метод требует указать владельца. Сперва попробовал так:
Код - C# [Выбрать]
  1. Application.ShowModalWindow(Application.MainWindow.UnmanagedWindow, msg, false);
Ругается, что неверный дескриптор окна.
Исправил на:
Код - C# [Выбрать]
  1. Application.ShowModalWindow(null, msg, false);
В таком виде с настройкой окна WindowStartupLocation="CenterScreen" работает шикарно!
Но с настройкой WindowStartupLocation="CenterOwner" есть досадный глюк. Позиция окошка вычисляется всегда для положения окна AutoCAD в состоянии Normal. То есть, полностью игнорируется  развернутый AutoCAD на весь экран (положение Maximize).

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Самое гибкое вроде с Activated - куда хочешь, туда и помещаешь. Можешь сам всё что надо вычислить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Да, с Activated работает почти как надо. Иногда возникает мелькание: окно создается сперва в том месте, куда его AutoCAD помещает, а потом переносится туда, куда надо. В принципе, это не критично. Спасибо Вам и Андрею за помощь!