Как программно создать окно WPF в приложении WinForm
У меня есть существующее приложение WinForm, которое слишком много для переноса в WPF прямо сейчас.
Тем не менее, мне нужно окно с каким-то сложным режимом прозрачности, которого я не могу добиться в WinForm (да, попробовал Layerd Windows, но это не-go).
WPF позволяет красиво и просто выполнять поведение прозрачности.
Конечно, я googled, но могу только найти подсказки, как создать элемент управления WPF в WinForm, но это НЕ то, что мне нужно. Мне нужно отдельное окно WPF, которое полностью зависит от моих других форм.
Окно WPF будет довольно простым полноэкранным и безграничным оверлейным окном, где я сделаю несколько простых рисунков, каждый с разными прозрачными пленками.
Как создать окно WPF в приложении WinForm?
Ответы
Ответ 1
Добавьте необходимые ссылки WPF к вашему проекту, создайте WPF Window
-nstance, вызовите EnableModelessKeyboardInterop и покажите окно.
Вызов EnableModelessKeyboardInterop
гарантирует, что ваше окно WPF получит ввод с клавиатуры из вашего приложения Windows Forms.
Позаботьтесь, если вы откроете новое окно из своего окна WPF, вход в клавиатуру не будет перенаправлен в это новое окно. Вы должны также вызвать эти вновь созданные окна EnableModelessKeyboardInterop
.
В соответствии с вашими другими требованиями используйте Window.Topmost и Window.AllowsTransparency. Не забудьте установить WindowStyle в None
, в противном случае прозрачность не поддерживается.
Обновление
Следующие ссылки должны быть добавлены для использования WPF в приложении форм Windows:
- PresentationCore
- PresentationFramework
- System.Xaml
- WindowsBase
- WindowsFormsIntegration
Ответ 2
Здесь (проверенное) решение. Этот код можно использовать как в 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();