gpt4 book ai didi

c# - 当另一个控件与它重叠时隐藏控件

转载 作者:行者123 更新时间:2023-11-30 18:03:09 25 4
gpt4 key购买 nike

我在使用 WPF 中托管的 Windows 窗体控件时遇到了很大的问题。例如,当用户滚动窗口时,托管控件会出现在窗口顶部,尽管它应该被隐藏。

我知道这是已知问题,也是托管控件的默认行为,但我认为如果控件的可见性以某种方式绑定(bind),则可以解决:其他控件是否与它重叠。如果其他控件重叠,它应该变为折叠或隐藏,如果没有,它应该是可见的。

我为此做了一些解决方案,但我是在 ScrollViewer 的 ScrollChanged 事件上做的,它只在特殊情况下有效。如果有人知道如何通过绑定(bind)实现这一点,以便它可以应用于任何托管控件,请分享您的想法。

最佳答案

对于同样的问题,我们实现了一些奇怪的东西......

Windows 窗体主机不受 Z 顺序的影响,因此滚动查看器将无法部分隐藏/剪辑它以用于在滚动查看器下可见的区域。

所以我们有两个选择......

  1. 使用 Windows 窗体宿主在其中承载 WPF UI 的其余部分,这意味着我们反转了 UI 的所有权。 WindowsFormsHost 必须承载其中的所有 UI,它具有基于 WinForms 的滚动查看器,而后者又将承载 WPF UI。

  2. 为窗口窗体主机的计算高度实现滚动偏移,当用户滚动时将此偏移量添加到滚动查看器的位置并自己隐藏 windforms 主机(Visibility = Hidden 折叠)。通过这种方式,它产生的效果是您不能部分滚动 winforms 主机,而是将其完全滚动到滚动查看器之外。并且由于 winformshost 是隐藏(未折叠),它继续占据滚动查看器下方不可见区域内的那么多高度(从而保持其滚动位置)。

让我知道这是否能引导您朝着正确的方向前进。

关于c# - 当另一个控件与它重叠时隐藏控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7471850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com