Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Дмитрий Загорулькин от 19-01-2017, 15:34:17

Название: Принудительное положение диалога WPF в центре окна AutoCAD или центре экрана.
Отправлено: Дмитрий Загорулькин от 19-01-2017, 15:34:17
Есть у меня небольшое окошко, которое я использую вместо стандартного Application.ShowAlertDialog. Запускаю его с помощью Application.ShowModalWindow.
AutoCAD записывает данные о положении в реестр. Если окошко сместить, то в следующий раз оно показывается уже в сохраненном месте. Мне хочется, чтобы оно было всегда по центру окна AutoCAD, на худой конец - в центре экрана. Попробовал задавать значения свойства начального положения:WindowStartupLocation="CenterOwner"илиWindowStartupLocation="CenterScreen"но это не работает. Положение окна все равно записывается в реестр.
Может быть, есть какой-то простой способ сделать так, чтобы окошко всегда запускалось в центре окна AutoCAD/экрана?
Название: Re: Принудительное положение диалога WPF в центре окна AutoCAD или центре экрана.
Отправлено: Александр Ривилис от 19-01-2017, 15:37:20
А удалять эту ветку реестра не пробовал? Или переписывать значение Bounds?
Название: Re: Принудительное положение диалога WPF в центре окна AutoCAD или центре экрана.
Отправлено: Дмитрий Загорулькин от 19-01-2017, 15:41:11
Ну я бы не назвал это простым решением :) Я подумал, может быть еще какое-то свойство задать-поменять можно, чтобы это исправить.
Если вручную удалять эту ветку, то работает. Предлагаете в коде прописать принудительное удаление ветки перед каждым запуском?
Название: Re: Принудительное положение диалога WPF в центре окна AutoCAD или центре экрана.
Отправлено: Александр Ривилис от 19-01-2017, 15:47:27
Есть более простой способ. Использовать перегруженую сигнатуру Application.ShowModalWindow с persistSizeAndPosition равным false
Или как предложил Андрей Бушман - подписаться на событие Activated и в нём спозиционировать окно: https://www.theswamp.org/index.php?topic=43077.msg482965#msg482965
Название: Re: Принудительное положение диалога WPF в центре окна AutoCAD или центре экрана.
Отправлено: Дмитрий Загорулькин от 19-01-2017, 16:37:36
Использовать перегруженую сигнатуру 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).
Название: Re: Принудительное положение диалога WPF в центре окна AutoCAD или центре экрана.
Отправлено: Александр Ривилис от 19-01-2017, 16:41:16
Самое гибкое вроде с Activated - куда хочешь, туда и помещаешь. Можешь сам всё что надо вычислить.
Название: Re: Принудительное положение диалога WPF в центре окна AutoCAD или центре экрана.
Отправлено: Дмитрий Загорулькин от 19-01-2017, 18:15:57
Да, с Activated работает почти как надо. Иногда возникает мелькание: окно создается сперва в том месте, куда его AutoCAD помещает, а потом переносится туда, куда надо. В принципе, это не критично. Спасибо Вам и Андрею за помощь!