Как программно создать окно WPF в приложении WinForm - PullRequest
11 голосов
/ 02 февраля 2011

У меня есть приложение WinForm, которое сейчас слишком много для переноса в WPF.Тем не менее, мне нужно окно с некоторым хитрым поведением прозрачности, которого я не могу достичь в WinForm (да, пробовал Windows Layerd, но это не пойдет).

WPF позволяет красиво и просто использовать поведение прозрачности, которое мне нужно.1003 *

Я, конечно, гуглил, но могу только найти подсказки, как создать элемент управления WPF в WinForm, но это НЕ то, что мне нужно.Мне нужно отдельное окно WPF, которое не зависит от других моих форм.

Окно WPF будет довольно простым полноэкранным окном с наложением, где я буду делать несколько простых рисунков, каждый с разной прозрачностью.

Как создать окно WPF в приложении WinForm?

Ответы [ 2 ]

14 голосов
/ 02 февраля 2011

Добавьте необходимые ссылки WPF в свой проект, создайте экземпляр WPF Window, вызовите EnableModelessKeyboardInterop и откройте окно.

Вызов EnableModelessKeyboardInterop гарантирует, что ваше окно WPF получит ввод с клавиатуры из вашего приложения Windows Forms.

Будьте осторожны, если вы откроете новое окно из окна WPF, ввод с клавиатуры не будет перенаправлен в это новое окно. Вы должны также позвонить для этих вновь созданных окон EnableModelessKeyboardInterop.

Для выполнения других требований используйте Window.Topmost и Window.AllowsTransparency . Не забудьте установить WindowStyle на None, в противном случае прозрачность не поддерживается.

Обновление
Следующие ссылки должны быть добавлены для использования WPF в вашем приложении Windows Forms:

  • PresentationCore
  • PresentationFramework
  • System.Xaml
  • WindowsBase
  • WindowsFormsIntegration
7 голосов
/ 03 февраля 2011

Вот (проверенное) решение. Этот код можно использовать как в приложении WinForm, так и в приложении WPF. XAML вообще не нужен.

#region WPF
// include following references:
//   PresentationCore
//   PresentationFramework
//   WindowsBase

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
 #endregion


public class WPFWindow : Window
{

    private Canvas canvas = new Canvas();

    public WPFWindow()
    {
        this.AllowsTransparency = true;
        this.WindowStyle = WindowStyle.None;
        this.Background = Brushes.Black;
        this.Topmost = true;

        this.Width = 400;
        this.Height = 300;
        canvas.Width = this.Width;
        canvas.Height = this.Height;
        canvas.Background = Brushes.Black;
        this.Content = canvas;
    }
}

Фон окна полностью прозрачен. Вы можете рисовать на холсте, и каждый элемент может иметь собственную прозрачность (которую вы можете определить, установив альфа-канал кисти, используемой для рисования). Просто вызовите окно с чем-то вроде

WPFWindow w = new WPFWindow();
w.Show();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...