我在选项卡(WPF应用程序)中有一个WPF usercontrol(myGraphicControl)。
当表单大小发生变化时,我会在myGraphicControl中重绘图形。
由于重绘操作是我需要只在可见选项卡中进行控制。
WPF(用户)控件如何检测它是否“可见”?
PS。
by Visible我的意思是用户可以看到它。 比如说,如果Visible TextBox位于当前不可见的选项卡中,则该文本框不会被用户看到。
答案 0 :(得分: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);
但是,我应该指出,我自己并没有尝试过,而且在以下情况下它可能不起作用:
答案 1 :(得分:2)
我发现虽然史蒂夫的方法通常有效,但如果你从儿童控制中间某处得到一个点,它的效果会更加可靠。我猜测沿途某处的布局舍入可能会使InputHitTest检查有些不准确。所以,将他的第一行更改为以下内容,你就是金色的:
var childTopLeft = childControl.TranslatePoint(new Point(childControl.RenderSize.Width/2, childControl.RenderSize.Height/2), parentControl);
答案 2 :(得分:1)
也许UIElement.IsVisible会有所帮助?它适用于标签内容。 无论如何,您可以使用here描述的解决方案。
我还有一个解决方案。 TabControl的当前实现从可视树中删除非活动选项卡。因此,确定元素是否可见的另一种方法是查找PresentationSource。对于非活动选项卡的元素,它将为null。