【问题标题】:Can't see WPF control on top Winform Control在顶部 Winform 控件上看不到 WPF 控件
【发布时间】:2020-06-10 13:09:40
【问题描述】:

我想在顶部的 Winform 控件上显示 WPF 控件。 我希望 WPF 按钮出现在 Winform 文本框的顶部。

结果是WPF控件隐藏在winform TextBox后面看不到了。 这是为什么?

这是我的代码:

<UserControl x:Class="Philips.PmsCT.Host.Applications.ExamApplication.ScanRulerComponent.WPFHostWF"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" Width="800" Height="120">
<Grid>
    <WindowsFormsHost >
        <wf:TextBox  BackColor="LightBlue" />
    </WindowsFormsHost>
    <Button Width="100" Height="25" Background="Red"/>
</Grid>

【问题讨论】:

  • 此代码在 WPF 控件中显示了一个 Windows 窗体,它与您的问题不匹配。父 Windows 窗体在哪里?
  • @ChrisF 我的猜测是,他想要文本框顶部的 WPF 按钮。所以要么他在使用 winforms 时遇到 wpf 问题,要么是一个简单的布局问题。
  • 嗨 ChrisF,我会提出我的问题,我希望 WPF 按钮显示在 Winform 文本框的顶部。

标签: wpf winforms


【解决方案1】:

您似乎遇到了Airspace 的问题。 因此,您可以重新排列这两个控件,将它们彼此相邻布局,而不是彼此重叠,或者使用 Wpf 文本框,或者您必须真正向后弯腰才能一起缓解空域问题。

【讨论】:

  • .NET 4.5 解决了空域问题:msdn.microsoft.com/en-us/library/…
  • 我想要的布局是 winform TextBox 顶部的 WPF 按钮。
  • @m-y 是的,添加此信息很有价值,不幸的是,问题缺少使用的 WPF 版本。
  • @EitanG 是的,但似乎,就像我已经写过的那样,您正遭受空域问题的困扰。请阅读链接以了解这与布局无关,它本身很好,但与 winforms 和 wpf 之间的渲染有关。
  • @dowhilefor 我已经阅读了空域问题的链接。你知道任何已知的解决方案吗?
【解决方案2】:

所有 WPF 控件都在一个本机窗口中呈现。例如,您可以通过 SPY++ 检查它。 几乎每个 WindowsForm 控件都在其自己的窗口中呈现。同样,您可以通过 SPY++ 进行检查。 当一个窗口 A(WPF) 被另一个窗口 B(Winform 控件) 覆盖时,您希望产生行为。同时您希望窗口 B 被 A(wpf 按钮)覆盖。我不知道没有任何钩子是否可以。 可能的解决方案是: 1.在WinForm面板中托管WPF,TextBox所在的位置。 2. 仅使用所需按钮创建 WPF 表单并将其显示在第一个表单上。

【讨论】:

    【解决方案3】:

    根据Microsoft docs:“可见的 WindowsFormsHost 元素始终绘制在其他 WPF 元素之上,并且不受 z-order 的影响。”

    【讨论】:

      猜你喜欢
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      相关资源
      最近更新 更多