【问题标题】:How to determine visible region of clipped WPF control?如何确定裁剪的 WPF 控件的可见区域?
【发布时间】:2011-03-13 20:25:59
【问题描述】:

有没有办法确定被父控件(例如 ScrollViewer、Canvas 或窗格)裁剪的 WPF 控件的可见区域?

我的问题的背景:我们在我们的应用程序中使用 WebBrowser 控件。由于它是从HwndHost派生的,所以父控件不能对其进行裁剪,即会与父控件重叠,看起来不太好看。因此,我的想法是在 WebBrowser 控件不完全适合父控件时自动调整其大小。我们的应用程序非常灵活,因此很难预测 WebBrowser 控件的父控件层次结构是什么。因此,我需要一个方法“UIElement.GetVisibleRegion()”,它返回一个带有控件可见部分的 Rect 或 Geometry,在控件坐标中。

非常感谢您提前提出任何有用的建议。

【问题讨论】:

  • 您找到解决问题的方法了吗?一些剪辑或可见区域,用于剪辑或调整托管控件的大小。
  • 不,根据微软告诉我的,这在 WPF 中是不可能的。

标签: wpf wpf-controls


【解决方案1】:

也许您可以将 WebBrowser 嵌入到容器控件(如 Border)中并处理容器的 SizeChanged 事件以调整 Web 浏览器控件的大小以适应。如果您需要多次执行自定义控件,它可能会很好。

【讨论】:

  • WebBrowser 控件的大小没有改变;它是更改的父控件之一的大小,从而更改了 WebBrowser 控件的可见部分。如果我们应用程序中的所有内容都是硬编码的,我们可以对父控件的 SizeChanged 事件做出反应。然而,在我们的应用程序中,WebBrowser 控件可以出现在控件层次结构中的任何位置,因此我们采用了更通用的方法。
  • 你不能将浏览器控件嵌入到 UserControl 中,当它自己的大小发生变化时,它会调整浏览器控件的大小?您可以将 UserControl 放在层次结构中的任何位置,并让它维护其子 Web 浏览器控件。
  • 我们希望避免将代码添加到层次结构中更高的控件以调整 WebBrowser 控件的大小,因为该控件将在许多不同的情况下在许多不同的地方使用。因此,所有智能都应该是从 WebBrowser 控件(例如客户控件)派生的类的一部分。
  • 这基本上就是我要说的。 UserControl = 自定义控件。但是我建议将 WebBrowser 包装在 UserControl 中,而不是从 WebBrowser 控件本身派生。
  • 您好,我接受您的回答,因为它为某些类型的应用程序提供了解决方案。对于我们复杂的应用程序,它不是可行的解决方案。同时我和MS谈过,他们基本上说目前没有可能确定剪辑区域。
猜你喜欢
  • 1970-01-01
  • 2010-11-14
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 2013-09-07
  • 1970-01-01
  • 2010-12-26
相关资源
最近更新 更多