Как получить элемент окна WPF в AutoCAD

Автор Тема: Как получить элемент окна WPF в AutoCAD  (Прочитано 11683 раз)

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

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

Оффлайн Павел55Автор темы

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Есть приложение с 3 окнами, которые вызываются по цепочке. Как в 3 окне получить элемент первого окна?
Пробовал вот так:
Код - C# [Выбрать]
  1. private void Button_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             foreach (Window window in App.Current.Windows)
  4.             {
  5.                 if (window.Title == "MainWindow")
  6.                 {
  7.                     (window as MainWindow).ok.Background = new SolidColorBrush(Colors.Black);
  8.                 }
  9.             }
  10.         }
Но это работает только вне AutoCAD

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #1 : 12-08-2020, 17:31:10 »
Павел55,
А не проще хранить в статических переменных указатели на эти окна?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #2 : 12-08-2020, 17:33:12 »
Но это работает только вне AutoCAD
А что происходит в AutoCAD? Вряд ли выполняется это условие:
Код - C# [Выбрать]
  1. if (window.Title == "MainWindow")
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Павел55Автор темы

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #3 : 12-08-2020, 17:37:19 »
Код - C# [Выбрать]
  1. foreach (Window window in App.Current.Windows)
Вот тут происходит ошибка - ссылка на объект не указывает на экземпляр объекта

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #4 : 12-08-2020, 17:39:00 »
Код - C# [Выбрать]
  1. foreach (Window window in App.Current.Windows)
Вот тут происходит ошибка - ссылка на объект не указывает на экземпляр объекта
А App у тебя что? Может лучше System.Windows.Application ?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Павел55Автор темы

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #5 : 12-08-2020, 17:44:28 »
так и есть. App - это System.Windows.Application.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #6 : 12-08-2020, 17:46:07 »
так и есть
А что показывает отладчик на App.Current.Windows ?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Павел55Автор темы

  • ADN OPEN
  • ***
  • Сообщений: 106
  • Карма: 3
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #7 : 12-08-2020, 17:48:03 »
Вроде null, не могу посмотреть - комп по пол часа висит при отладке.

Отмечено как Решение Павел55 14-08-2020, 09:41:58

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #8 : 12-08-2020, 19:10:57 »
Павел55,
Так как AutoCAD - это не чистый .NET код, то вполне возможно, что и null. Поэтому советую просто хранить указатели на WPF-окна и пользоваться ими по мере необходимости.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #9 : 12-08-2020, 19:14:45 »
Павел55,
А вообще-то тебе случайно не до родительского WPF-окна нужно достучаться?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #10 : 13-08-2020, 18:53:54 »
Какая логика работы окон? Я, например, вызываю окно из AutoCAD, потом его скрываю и передаю управление в AutoCAD, делаю то, что мне нужно и передаю данные из чертежа в окно.
Вот примерно такая схема

Код - C# [Выбрать]
  1. var window = Window.GetWindow(this);
  2. window.Hide();
  3.  
  4. //Что-то делаю//
  5.  
  6. window.Show();

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #11 : 19-08-2020, 14:53:48 »
Есть приложение с 3 окнами, которые вызываются по цепочке. Как в 3 окне получить элемент первого окна?
Думаю, что если для третьего окна надо что-то из первого, то оно должно его получать или в конструкторе, или их ViewModel должны иметь такую связь. По-хорошему, не должно быть таких поисков данных во время выполнения. Кстати, такая обработка кликов кнопок - это не приветствуется в WPF.
Какая логика работы окон? Я, например, вызываю окно из AutoCAD, потом его скрываю и передаю управление в AutoCAD, делаю то, что мне нужно и передаю данные из чертежа в окно.
Вот примерно такая схема
Насколько я помню, в AutoCAD это принято делать через Editor.StartUserInterction: https://adn-cis.org/forum/index.php?topic=1811.msg6981#msg6981

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #12 : 19-08-2020, 15:05:41 »
Насколько я помню, в AutoCAD это принято делать через Editor.StartUserInteration: https://adn-cis.org/forum/index.php?topic=1811.msg6981#msg6981
Не просто принято, а практически обязательно, так как переключает ресурсы с формы на AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #13 : 19-08-2020, 15:13:49 »
Ну оно вроде как работает без встроенных методов. Я вот сейчас даже не назову ни одного примера, когда может случиться гарантированный сбой, если не использовать встроенный метод. Но риск есть, поэтому, да, надёжнее всё-таки ими. Это аналогично ситуации с показом окна: можно использовать System.Windows.Window.ShowDialog, а можно (и лучше) Autodesk.AutoCAD.ApplicationServices.Application.ShowModalWindow. Но я знаю примеры, когда уже довольно давно используют первый вариант и проблем с этим не наблюдается.

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Как получить элемент окна WPF в AutoCAD
« Ответ #14 : 20-08-2020, 18:21:33 »
Насколько я помню, в AutoCAD это принято делать через Editor.StartUserInteration: https://adn-cis.org/forum/index.php?topic=1811.msg6981#msg6981
Не просто принято, а практически обязательно, так как переключает ресурсы с формы на AutoCAD.
А на что это влияет? Просто у меня всё работает и без этого.