Включение формы из приложения WPF в проект RevitAddin

Автор Тема: Включение формы из приложения WPF в проект RevitAddin  (Прочитано 6052 раз)

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

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

Оффлайн Владимир ПАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Сделал приложение, которое выполняться в Ревите, запускается из "библиотеки классов" dll.
В этом приложении исходные данные вводятся в обычной WindowsForms.
Затем захотелось сделать красиво, использовать "Окно" ввода исходных данных на основе WPF.
Отработал все, что мне нужно для ввода исходных данных в приложении WPF, т. е. получился exe-файл.
Основная проблема в том, что приложение WPF, напрямую, не собирается в dll.
Похоже вариантов как внедрить файлы WPF в dll может быть несколько.
Про обходной путь, т.е. сделать в обычной Win-форме host, тут же сделать пользовательский элемент на основе WPF, внедрить этот элемент в host и т. д. я знаю.
Но может быть, вообще, такая задача решается как-то проще?
Пока пробую так: создаю пустой проект по шаблону Revit 2015 Addin, туда добавляю файлы из проекта WPF с диалоговым окном MainWindow.xaml. и MainWindow.xaml.cs. Дальше не знаю, как сделать, чтобы при запуске dll  в Ревит включалось это окно MainWindow.xaml.? или это невозможно?

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Владимир, как я вижу, у вас сейчас полная каша в голове.
Естественно все можно сделать просто. Самый простой вариант - в той же самой dll, где у вас код надстройки Revit, при выполнении команды открывать форму WPF.

Основная проблема в том, что приложение WPF, напрямую, не собирается в dll.
все прекрасно собирается. В настройках проекта установите OutputType = Class Library.

т.е. сделать в обычной Win-форме host, тут же сделать пользовательский элемент на основе WPF, внедрить этот элемент в host и т. д. я знаю.
Какой ужас:) Не знаю где вы нашли такой Workaround, но лучше про него забыть и не вспоминать больше. По крайней мере для данного случая.

Оффлайн Владимир ПАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Владимир, как я вижу, у вас сейчас полная каша в голове.
За "кашу" отдельное спасибо! Но вопрос вообще-то, был не про то, что у меня в голове. Как раз, чтобы кашу упорядочить хоть чуть-чуть, я и задаю здесь вопросы. Если же Вас сильно раздражают вопросы начинающих, просто игнорируйте таких "чайников"... Какие проблемы?
Основная проблема в том, что приложение WPF, напрямую, не собирается в dll.
все прекрасно собирается. В настройках проекта установите OutputType = Class Library.
Ну давайте вместе попробуем: Создаем проект - Приложение WPF - В Свойствах проекта, Тип выходных данных, меняем "Приложение Windows" на "Библиотеку классов".
После этого нажимаем кнопочку "Собрать решение". В итоге получаем следующую картину, см вложение.
А именно: Ошибок 2.
Виктор, Вы вот это имеете в виду, когда говорите, что "все прекрасно собирается"? или у Вас как-то по-другому?
Ну, ладно бы, у меня одного не получилось. Но я ж потом спросил у Яндекса: c# wpf в dll (поиск). Попробуйте набрать нечто подобное.
И оказалось немало людей на специализированных форумах тоже обсуждают эту проблему, например:
 CyberForum.ru - форум программистов и сисадминов.

Цитировать
Какой ужас:) Не знаю где вы нашли такой Workaround, но лучше про него забыть и не вспоминать больше. По крайней мере для данного случая.
ну, вот в недрах таких форумов, такие ужасы! сам бы я, со своей кашей в голове, такого никогда бы не сочинил!   ;)

Отмечено как Решение Александр Ривилис 09-11-2015, 19:21:13

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Если же Вас сильно раздражают вопросы начинающих, просто игнорируйте таких "чайников"...
Владимир, да нет, раздражения никакого не было отнюдь. Имел ввиду что собрали все подряд казалось бы не связанные друг с другом проблемы:)
После этого нажимаем кнопочку "Собрать решение". В итоге получаем следующую картину, см вложение.
А именно: Ошибок 2.
Виктор, Вы вот это имеете в виду, когда говорите, что "все прекрасно собирается"? или у Вас как-то по-другому?
Ну это совсем никакая не проблема. Собственно Visual Studio прямо говорит что здесь не так.
В случае с "Приложением Windows" генерируется класс Main, задающий точку входа в приложение. Этим собственно и отличается приложение Windows от Библиотеке классов. WPF видимо где то в файле проекта из-за этого добавил элемент ApplicationDefinition. Вернее WPF генерит еще некоторые файлы, в частности класc Main, которые не видны в проекте.
Собственно проблема решается очень просто. Нужно удалить файл App.xaml и App.xaml.cs через который осуществляется точка входа. Удалив их, все собирается (сам только что проверил:))

ну, вот в недрах таких форумов, такие ужасы! сам бы я, со своей кашей в голове, такого никогда бы не сочинил!   
Честно говоря, я в шоке. Такую простую проблему, решать таким извращенным способом:)
« Последнее редактирование: 09-11-2015, 19:23:01 от Александр Ривилис »

Оффлайн Владимир ПАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Собственно проблема решается очень просто. Нужно удалить файл App.xaml и App.xaml.cs через который осуществляется точка входа. Удалив их, все собирается (сам только что проверил:))
И я проверил! есть dll из приложения WPF! Спасибо Виктор!