Хостинг WPF UserControl в прозрачной Windows.Form

Мне нужно вставить свой WPF USerControl в Windows.Form, Это мой контроль:

<UserControl x:Class="WpfControlLibrary1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Background="Transparent">

    <InkCanvas x:Name="Ink" Background="Transparent" />

</UserControl>

Для размещения этого элемента управления я использую ElementHost объект как единственный элемент управления моей формы. Мне нужно иметь возможность сделать следующее: когда я устанавливаю непрозрачность формы на 0, чтобы сделать ее невидимой, мне нужно продолжать иметь непрозрачность всех Children а также Strokes моего InkCanvas до 1 (чтобы я мог их видеть).

Я пытался использовать TransparencyKey свойство, но, похоже, не работает с ElementHost, Как я могу решить эту проблему, и как я могу установить различную непрозрачность между моей формой и моим UserControl?

3 ответа

Решение

AFAIK, это невозможно, так как WPF использует субпиксельный альфа-рендеринг, который, например, недоступен для winform.

Надеюсь это поможет

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

  • Создайте WPF usercontrol control и установите background ="transparent".

  • Создайте пользовательский элемент управления Win без элементов управления и напишите следующий код:

    public WinControl()
    {
        InitializeComponent();
    }
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
    
            cp.ExStyle |= 0x00000020;
            return cp;
        }
    }
    
  • Теперь поместите WPF usercontrol в пользовательский элемент управления Win и прикрепите wpfusercontrol к его родительскому элементу (пользовательский элемент управления win).

  • Теперь перетащите пользовательский элемент управления win в форму |Win и закрепите пользовательский элемент управления win в родительский элемент (Форма).

И вы сделали.

Вы можете использовать Microsoft.Ink.dll для создания собственного UserControl на основе WinForms, который поддерживает распознавание рукописного ввода, если это то, что вы пытаетесь сделать.

Другие вопросы по тегам