小编doo*_*ail的帖子

从WPF中托管的WinForms控件创建表单 - 未设置所有者

脚本

我有以下场景(我已将其剥离为示例应用程序):

  • 带有窗口(MainWindow)的WPF应用程序,托管WinForms UserControl(UserControl1).
    • 控件在后面的代码中动态添加到a WindowsFormsHost
  • UserControl1有一个打开表单的按钮(Form1)
    • 它使用form1.Show(this).

问题是:

  • Form1.Owner属性为null.
    • 在实际应用程序中,涉及.Owner属性的一些工作已经完成,这意味着我不能忽略这个问题.当然,理想情况下,这里没有任何依赖性.
    • 在实际应用程序中,我无法控制此代码的WinForms端.我们的WPF应用程序正在托管另一个团队的WinForms控件.
    • 笔记:
      • 当我使用WinForms主机时,该.Owner属性设置正确.
      • UserControl1以其他所有方式托管 - 在实际应用程序中,其他一切工作正常,只是用户控件打开的表单没有合适的所有者.

我能理解为什么这里有问题,但我希望我的下一个问题的答案可能是'是'!

有什么方法可以通过在等式的WPF方面进行更改来实现这一点吗?

如果不这样做,可以在WinForms方面做任何事情吗?(这可能超出了我可以在那里实现一些变化的可能性......)

示例代码

这是我的示例应用程序中的代码.首先是WPF方面:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:my="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="700">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Button Name="btnAdd" Click="btnAdd_Click" Content="Add Winform"/>

        <WindowsFormsHost Grid.Row="1" Name="host" ScrollViewer.CanContentScroll="False"/>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
public partial class MainWindow : Window
{
    private WindowsFormsHost host;

    public MainWindow()
    {
        InitializeComponent(); …
Run Code Online (Sandbox Code Playgroud)

c# wpf winforms-interop winforms

5
推荐指数
1
解决办法
2274
查看次数

标签 统计

c# ×1

winforms ×1

winforms-interop ×1

wpf ×1