【问题标题】:WPF: Determine if a Panel is visible to the userWPF:确定面板是否对用户可见
【发布时间】:2011-07-30 19:37:34
【问题描述】:

我在选项卡(WPF 应用程序)中有一个 WPF 用户控件(myGraphicControl)。

当表单大小发生变化时,我会在 myGraphicControl 中重新绘制图形。

由于重绘操作是一个我只需要在可见选项卡中的控件。

WPF(用户)控件如何检测它是否“可见”?

PS。

可见我的意思是用户可以看到它。 比如说,如果 Visible TextBox 位于当前不可见的选项卡中,则该文本框对用户是不可见的。

【问题讨论】:

  • 可见是什么意思?最重要的是,没有以任何方式被遮挡?
  • 我遇到了同样的问题,我解决了。我在这个线程中写了解决方案:stackoverflow.com/questions/1517743/…

标签: wpf wpf-controls


【解决方案1】:

我发现,虽然 Steve 的方法通常有效,但如果您从子控件中间的某个位置获得一个点,它的工作会更加可靠。我猜想可能是布局舍入沿途某处使 InputHitTest 检查有些不精确。所以,把他的第一行改成下面这样,你就成功了:

var childTopLeft = childControl.TranslatePoint(new Point(childControl.RenderSize.Width/2, childControl.RenderSize.Height/2), parentControl);

【讨论】:

    【解决方案2】:

    也许UIElement.IsVisible 会有所帮助?它适用于标签内容。 无论如何,您可以使用here 描述的解决方案。

    我还有一个解决方案。 TabControl 的当前实现从可视化树中删除了非活动选项卡。因此,确定元素是否可见的另一种方法是查找 PresentationSource。对于非活动选项卡的元素,它将为 null。

    【讨论】:

    • ) 比方说,在这里问之前,测试“IsVisible”是可以测试的第一件事。我的元素始终是 IsVisible,这意味着它不是隐藏的,但如果用户可以看到它就不会隐藏,因为它位于“非活动”选项卡中。
    • 感谢第二个链接。不幸的是,我的控件不在 Scrollwiever 中,而是在 TabControl 的选项卡中。
    • 好的,我也测试过了。对于“非活动”选项卡中的元素,此属性为 false。也许你应该重复你的测试? :)
    • 我更改了答案以添加另一个解决方案:)
    • 问题是我使用了WindowsForm选项卡控件。我在 Winforms 应用程序中托管了一个 WPF UserControl。所以 TabControl 是 WinForms 的...
    【解决方案3】:

    我不相信这里有快速修复的解决方案,但您可以使用UIElement.InputHitTest(Point) 做一些事情。

    你可以拨打类似的电话

    //get the coordinates of the top left corner of the child control within
    //the parent
    var childTopLeft = childControl.TranslatePoint(new Point(), parentControl);
    //check whether or not the child control is returned when you request the element
    //at that coordinate through hit testing
    var isVisible = (parentControl.InputHitTest(childTopLeft) == childControl);
    

    但是,我应该指出,我自己没有尝试过,并且它可能无法在以下情况下工作:

    • 透明项目 - 通常,透明背景会导致控件的命中测试传递给父项
    • 部分被遮挡的项目 - 您一次只能命中测试一个点,因此如果您的子控件只有一部分可见,则必须检查正确的点

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 1970-01-01
      • 2011-01-03
      • 2011-09-10
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 2013-01-23
      相关资源
      最近更新 更多