Какую технологию я должен использовать, чтобы открыть простую форму в моей надстройке DLL? - PullRequest
0 голосов
/ 09 июня 2010

Я собираю сборку, которая запускается как «надстройка» для надстройки Outlook поставщика. Когда мне пора выполнить свое «действие», я должен открыть простое окно с несколькими простыми элементами управления. Надстройка производителя предоставляет мне целочисленный дескриптор родительского окна. Я могу довольно легко создать форму с помощью WinForms, добавив ссылку на System.Windows.Forms из моей сборки и следующий код:

        FrmHistoryDisplay frm = new FrmHistoryDisplay();
        frm.ShowDialog(new ParentWindowWrapper(_parentWindowHandle));

где ParentWindowWrapper - это класс подкладки вокруг дескриптора окна, который мне дан

        private class ParentWindowWrapper : IWin32Window {

        private int _parentWindowHandle;

        public ParentWindowWrapper(int parentWindowHandle) {
            _parentWindowHandle = parentWindowHandle;
        }

        public IntPtr Handle {
            get { return new IntPtr(_parentWindowHandle); }
        }
    }

В методе ShowDialog формы используется реализатор IWin32Window, чтобы обернуть дескриптор окна родителя.

Это все работает и кажется достаточно простым. Мне просто интересно, можно ли сделать нечто подобное с окном WPF, а не с формой WinForm? Должен ли я заботиться?

Ответы [ 2 ]

2 голосов
/ 09 июня 2010

Да, вы можете сделать то же самое с WPF для размещения окна WPF, которое принадлежит или связано с произвольным дескриптором окна Win32.Используя wHandle в контексте метода формы WPF, вы можете сделать это:

var helper = new WindowInteropHelper(this);
helper.Owner = wHandle;

this.Show();

Это настроит окно WPF в качестве стандартного окна верхнего уровня, которое принадлежит данному wHandle.Владение дескриптором окна Win32 имеет решающее значение для модального поведения диалога, активации окна и фокусировки при нажатии на любое из окон деактивированного приложения и т. Д.

Нужно ли использовать WinForms или WPF для надстройки Outlook, действительнодо вас и ваших предпочтений.Я уверен, что пользовательский интерфейс Outlook не использует ни WinForms, ни WPF, поэтому, что бы вы ни делали, вам потребуется убедиться, что на компьютере установлены правильные библиотеки при установке надстройки.

1 голос
/ 09 июня 2010

Я буду использовать метод, прокомментированный следующим образом:

"положить из довольно легко с WinForms"

Поскольку это поддерживается, будет иметь больше сборкитаким образом, в функциональности вашей надстройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...