2013-09-20 3 views
2

У меня есть проект WPF, который скомпилирован в dll и будет вызван из другого приложения. Вот как он настроен. В этом проекте WPF мне нужно открыть настраиваемое окно сообщения из модели представления главного окна, чтобы отображать сообщения пользователю. Это настраиваемое окно сообщения требует параметра Window. Вот так вот.Как получить ручку к окну в wpf?

Для приложения WPF Application.Current.MainWindow доставит мне то, что мне нужно. Но здесь это dll, поэтому Application.Current имеет значение NULL и приводит к исключению времени выполнения. Я также пробовал что-то вроде Window.GetWindow(this). Здесь он не работает, потому что это «модель», поэтому он не даст мне ручку главного окна.

Что еще я могу получить, чтобы получить ручку главного окна здесь?

Спасибо.

+0

зачем вам главное окну, чтобы всплывать другое MessageBox? – Nitin

+0

Вы можете получить его через 'Отражение' и инстанцировать его через' Activator.CreateInstance() ' –

+0

Можете ли вы сказать немного больше о том, как использовать Reflection для этого? – user2417994

ответ

0

После того, как вы получите DLL приложения, и если вы знаете имя окна, вы можете получить и instaniate через отражение

string myWpfAssemblyPath = ""; // Enter the path to your application here 
Assembly wpfAppAssembly = Assembly.Load(myWpfAssemblyPath); 

var MainWindow = (Window)wpfAppAssembly.CreateInstance("myMainWindow"); 

Обратите внимание, что это создаст новый экземпляр окна, а не получить вас дескриптор окна, которое уже запущено. для получения дескриптора окна, который уже создан, вы можете использовать API WIN32.

Вот некоторые ссылки, которые помогут вам сделать это:

Get Window instance from Window Handle

Get Application's Window Handles

http://social.msdn.microsoft.com/Forums/vstudio/en-US/1d7bd916-9bbe-4c76-b9a0-8306159035a1/faq-item-how-to-retrieve-a-window-handle-in-visual-cnet

Надеется, что это помогает

Смежные вопросы