прозрачность C# WPF над элементами управления Winform

у меня есть элемент управления WPF, который я хотел бы наложить на приложение WinForms. Поэтому я послушно создал узел элементов, который может отображать следующий объект WPF:

<UserControl x:Class="LightBoxTest.LightBox"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300" Background="Transparent">
    <Grid Name="dialogHolder" Background="Transparent" Opacity="1">
        <Rectangle Name="rectangle1" Stroke="White" Fill="Black" RadiusX="10" RadiusY="10" Opacity="0.5" />
        <StackPanel Name="stackPanel1" Background="Transparent" Height="300" VerticalAlignment="Top">
            <Rectangle Name="spacer" Opacity="0" Stroke="Gray" Fill="White" RadiusX="10" RadiusY="10" Height="100" Width="300" />
            <Grid Height="100" Name="contentHolder" Width="250">
                <Rectangle Name="dialog" Stroke="Gray" Fill="White" RadiusX="10" RadiusY="10" Height="100" Width="250" />
            </Grid>
        </StackPanel>
    </Grid>
</UserControl>

проблема в том, что элементы управления в форме WinForm не отображаются, и WPF просто уничтожает их на экране.

хост элемента создается следующим образом:

dialogHost = new ElementHost(); 
dialogHost.Child = dialog;
dialogHost.BackColorTransparent = true;
dialogHost.BringToFront();  
dialogHost.Show();

есть ли что-то, что я должен делать, а я нет?

существуют ли известные проблемы с показом прозрачные элементы управления WPF над Winforms?

любые статьи, которые могут помочь?

Примечание: этот вопрос связан с этот вопрос

4 ответов


Я думаю, вы столкнулись с проблема в воздушном пространстве. AFAIK, вы не можете смешивать прозрачность WPF и прозрачность ElementHost, так как ElementHost владеет воздушным пространством.

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

возможно, вы можете рассмотреть возможность переноса большего количества приложений WinForms в WPF?


вы должны прочитать это :черный фон перед загрузкой WPF controll при использовании ElementHost Просто скрыть и показать его (не круто, но работает)


вы, вероятно, уже пробовали это, но как насчет установки непрозрачности на пользовательском элементе управления?


Это похоже на взаимодействие пространство