问题标签 [visualtreehelper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
43669 浏览

WPF 获取鼠标下的元素

WPF 有没有办法在 MouseMove 事件上获取鼠标下的元素数组?

0 投票
1 回答
702 浏览

如何检测表面接触是否在 ScatterView 上方?

这与 MS Surface 的 SDK 示例购物车中的(某种)类似情况。

我有一个带有两个 ScatterViews 的应用程序。第一个覆盖整个 Surface 窗口(“表面”)。第二个驻留在 TagVisualization 对象(“pod”)中。可能有多个可用的 pod(如果桌子上有多个标签)。

我希望能够将 ScatterViewItem 从“吊舱”拖到“表面”或另一个“吊舱”。我在检测 ScatterViewItem 是否离开其 ScatterView 父项方面没有问题。此外,重新设置 ScatterViewItem 也没有问题。

但是,我想检测该项目被拖动到哪个 ScatterView 上。在 SDK 示例中,他们使用了位于 ScatterViews 下方的可视元素(在本例中为椭圆)。VisualTreeHelper.HitTest 用于确定接触是否在椭圆上。如果是这样,则找到“已连接”的 ScatterView。

我不认为这是一个非常优雅的解决方案。我不希望在其中放置视觉元素,只是为了检测联系人是否在 ScatterView 上。

有没有更好的方法来完成这种“命中测试”?

谢谢,巴特

0 投票
1 回答
1477 浏览

从 gridview 对象获取父列表视图

在 WPF 应用程序的代码隐藏中,我有一个包含 GridView 的变量。我确定这个 GridView 是 ListView 的视图。有没有办法获得对该 ListView 的引用?

谢谢

0 投票
1 回答
1109 浏览

如何“插入”WPF 渲染周期以从 VisualTreeHelper 获得准确的结果?

我目前正在编写一个 WPF 用户控件 (PARENT),它可以包含多个子 (CHILD) 用户控件。我正在将 (CHILD) 控件与折线连接起来。

为此,我需要 CHILD 用户控件的位置。但是,我从 VisualTreeHelper.GetOffset 获得的位置为零。WPF 可能还没有完成调整 CHILD 控件的大小并将其放置在内存中,因为当我将代码放在控件的 OnLoaded 事件处理程序中时,我确实获得了子控件的正确位置。

这是一个问题,因为即使在我加载了 PARENT 控件之后,我仍然希望能够添加 CHILD 控件并更新我的行。

我目前如何解决这个问题是通过覆盖我的 CHILD 控件的 OnRender 并为我的 MAIN 控件引发一个事件,以便它知道它可以使用 VisualTreeHelper 来获取正确的值。

然而,这意味着我需要重新绘制线条,直到最后一个 CHILD 控件完成渲染。

我目前的解决方案感觉更像是一种解决方法而不是解决方案。如何“插入”WPF 渲染周期以从 VisualTreeHelper 获得准确的结果?

0 投票
2 回答
2542 浏览

WPF 中 Silverlight 的 FindElementsInHostCoordinates 等效项是什么?

我想对 WPF Canvas 组件执行矩形命中测试,以获得与 Rectangle 框架元素重叠的控件。我找到了 Silverlight 的VisualTreeHelper.FindElementsInHostCoordinates方法,但显然它在 WPF 中不可用。

实现此类功能的最佳方法是什么?

0 投票
1 回答
3122 浏览

FindElementsInHostCoordinates 相对于控制空间不是整个页面

我正在使用 VisualTreeHelper 方法 FindElementsInHostCoordinates 在给定的 X 和 Y 位置查找 ListBoxItem。但是,X 和 Y 值似乎与整个页面中的点有关,而不仅仅是我感兴趣的 ListBox(即使我将该元素传递到该方法的子树参数中)。下面,this 指的是从 ListBox 派生的自定义控件。

因此,(0,0) 将相对于整个插件的左上角而不是 ListBox 的左上角。我是否需要自己在这里做一些数学工作(在代码中)将页面坐标转换为 ListBox 坐标,或者是否有其他方法可以进行命中测试以判断给定的 X 和 Y 点是否在 ListBoxItem 上方?

谢谢。

0 投票
1 回答
560 浏览

查找属于通过代码生成的默认控件模板 ComboBox 的 TextBlock

我正在尝试查找组合框的控件模板内的 TextBlock。仅当在 XAML 中声明了组合框时,使用 VisualTreeHelpar.GetChildrenCount 才有效。在这种情况下,GetChildrenCount 返回 1 并且可以进行递归搜索。

但是,如果我使用代码将组合声明为 Window 类的成员、分配并将其设置到它的位置,则函数 GetChildrenCount 返回 0。当我在这种情况下运行 snoop 时,它会显示组合子层次结构。我希望能够像 snoop 一样搜索组合框。

任何帮助,将不胜感激。

代码:

0 投票
2 回答
670 浏览

SIlverlight:在画布上找不到图像

在我的画布中,我有一个图像对象。我没有在其中设置源,但它有坐标和大小。标签是:

<Image Canvas.Top="50" Canvas.Left="20" Height="68" Width="110" Horizo​​ntalAlignment="Left" Name="image1" Stretch="Fill" VerticalAlignment="Top" />

这就是问题所在:当我将鼠标移到它上面时,我想找到它。使用此代码:

VisualTreeHelper.FindElementsInHostCoordinates(点,Application.Current.RootVisual)

除非设置了源,否则它不会找到图像。如果未设置源,则不返回图像。有谁知道为什么?这给我带来了问题。我有一些拖放代码,我希望在该图像控件上放置一些东西,但我需要知道鼠标何时在它上面。

我知道还有其他方法可以做到这一点(例如在该位置放置其他东西,例如网格或其他东西并检测它),但这不起作用。我可以想到几种可行的方法,但它们远没有那么优雅。

如果我能让上面的东西返回我的图像,那绝对是理想的。

0 投票
2 回答
200 浏览

How to calculate a bounding box for an Expander?

I have an Expander control and i need to calculate its bounds without invisible elements and margins. It commonly can be done by VisualTreeHelper.GetDescendantsBounds. But it seems that the rect is calculated by VisualTreeHelper doesn't depend on the expander state. For example:

http://i.piccy.info/i5/58/39/273958/collapsed.jpg

(i can't post images. sorry)

The same result as for expanded state (light green rectangle on the image). Does anybody know how to solve this problem?

0 投票
2 回答
10159 浏览

WPF 中 VisualTreeHelper.HitTest 的问题

我正在尝试在 Canvas 上测试一堆 UserControl。我不希望 HitTest() 一直遍历可视化树,所以我使用 FilterCallback 来确保我只对 UserControl 进行命中测试。

我的问题是 UserControl 从来没有命中,它应该,但它没有。如果我使用 FilterCallback,我会返回它没有命中任何内容。如果我让 HitTest 在可视化树中运行,它会跳过 UserControl。

这是一些代码: