问题标签 [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 投票
2 回答
642 浏览

wpf - 在 MainWindow 的构造函数期间 ItemsControl 没有子级

根据对 SO 问题“ WPF:在网格中排列集合项目”的回答,我有以下内容:

现在,我想在后面的代码中设置 theGrid 的行数和列数:

为此,当然,我需要找到网格。我在 SO question WPF 方法中使用 CrimsonX 的 FindChild 查找控件以首先定位 itemsControl1,然后将其用作父项,定位 theGrid。

这在从按钮的单击事件处理程序调用时有效。但是,当从 MainWindow 的构造函数调用时它会失败,因为 ic 的 childrenCount 为 0。

那么,如何在窗口显示给用户之前设置 theGrid 的行和列集合?

0 投票
2 回答
657 浏览

silverlight - 如果 DataTemplate 嵌套在另一个 Datatemplate 中,则很难与 parent-template 属性绑定

你知道吗?这个问题在网上已经讨论过很多次了。但我的是一个特例,我仍然没有找到正确的解决方案。

场景:Silverlight 4 - 一个 TreeView,其数据由两个 HierarchicalDataTemplate 显示,一个显示第一级数据(即 TreeView 的父项的数据),一个显示第二级数据(用于子项的数据)项目)。在子项模板中,我必须将控件的可见性绑定到父模板的数据源类的属性。

这是 XAML 代码:

如果是 WPF,我可以写:

可见性 =“{Binding DataContext.Ori, Converter={StaticResource rVisibilityConverter}, RelativeSource={RelativeSource AncestorLevel=2, AncestorType={x:Type TreeViewItem}, Mode=FindAncestor}}”

......它肯定会奏效。但我知道在 Silverlight FindAncestor as binding-mode with RealitiveSource is not supported中。网络中的解决方案都围绕在可视化树的代码隐藏中向下滚动。它是通过 Behavior 还是通过 Attached-Propery 实现的并不重要。解决方案是这样的:

我多次使用这样的解决方案,它们总是有效的。但是在这种情况下,我的 DataTemplate嵌套到另一个 DataTemplate 中,然后,当我在“OnAttached”方法中时,“AssociatedObject”的属性“Parent”什么都没有,然后我没有 Visual-Tree to scroll

你有什么建议吗?先感谢您!皮莱吉

0 投票
1 回答
692 浏览

.net - “VisualTreeHelper.GetDescendantBounds()”返回无穷大

为什么VisualTreeHelper.GetDescendantBounds(SomeVisualItem)方法返回(-Infinity,-Infinity,Infinity,Infinity)

SomeVisualItem 的Canvas.Left, Canvas.Top, Width, ... 是显式分配的。

0 投票
0 回答
1173 浏览

wpf - 如何在 WPF 中对一个特定的 3d 对象执行命中测试?

我的 WPF 3D 场景中有一个 SphereMesh(从 MeshGeneratorBase 继承,作为 Petzold.Media3D.dll 的一部分)。我在那个球体上也有数千个 ScreenSpaceLines3D 对象。我想忽略场景中除 SphereMesh 之外的所有内容,并仅找出鼠标光线与球体相交的 XYZ 坐标。即使球体和鼠标之间还有另一个物体 X,我仍然想知道鼠标会在哪里撞击球体,就好像物体 X 不存在一样。

我已经使用 HitTest 尝试了下面的代码,但是当我在我的场景/世界中添加数千/数百万个其他对象时,它变得非常慢。对象阻塞问题是我无法解决的另一个问题。

你有什么建议吗?

当前代码:

有什么帮助吗?

谢谢。

0 投票
1 回答
565 浏览

visualtreehelper - 使用 VisualTreeHelper 在 WPF 中获取子属性不返回值

一旦我使用 visualTreeHelper.getchild 查找子对象,我将如何获取该对象的名称,甚至对象的其他属性(如宽度或高度)?

IE

这不起作用:

它说“名称”类型的值不能转换为 system.windows.dependencyProperty

这也不起作用(但至少它可以编译):

如果我将鼠标悬停在 childvisual 上,我可以查看它的属性并看到该名称已设置为我在画布 (Can1) 上拥有的图像的名称。但是,X 和 Y 始终为 0。

0 投票
1 回答
490 浏览

c# - VisualCollection 到 Visual HitTest 不可见?

我正在使用 WPF 中的 VisualCollection、Visual 和 HitTest 并遇到问题。

我尝试制作自定义视觉绘图,如下所示:

然后我发现结果是矩形而不是md1。

我怎样才能使 MyDrawing 成为基本的 Visual 元素,以便 VisualTreeHelper 不会进一步在里面做 HitTest?

非常感谢。

0 投票
3 回答
137 浏览

c# - 使用谓词条件搜索元素

如何通过谓词在 VisualTree 中找到框架元素?类似的东西:

我将使用它:

提前感谢您的帮助!

0 投票
1 回答
3346 浏览

wpf - 从控件中获取 ContentPresenter/ItemsPresenter

如果确实存在,我需要一种从控件访问 ContentPresenter/ItemsPresenter 的方法。

我不知道如何使用 VisualTreeHelper 轻松做到这一点。

我需要递归搜索所有孩子吗?

0 投票
2 回答
274 浏览

c# - 使用 Prism 强制创建视觉树

我有一个TabControl包含棱镜区域。我想为某些事件触发某种通知(例如闪烁选项卡标题),并且我想从 Prism 区域中的组件触发此通知。

一旦包含此类组件的选项卡打开一次,它就可以很好地使用VisualTreeUtil.GetParent()并向上运行,直到我找到我的TabControl并可以对其进行修改以指示通知。

但问题是这在用户打开选项卡之前不起作用,因为VisualTreeUtil.GetParent()返回 null;显然是因为 Prism 直到那时才连接视觉树。

调用包含UpdateLayout()TabItem区域并没有帮助。我不想以编程方式打开 TabItems,因为这会使用户感到困惑。

除了实施一种区域注册表(这会相当丑陋且难以维护)之外,我还能做些什么吗?

如果您想查看代码,我编写了一个最小的解决方案来演示该问题。Print Structure按钮尝试从第二个选项卡上的(最初未渲染的不可见的)hello TextBlock 向上移动可视化。在您切换到选项卡之前,它只打印 TextBlock,然后您会到达可视树的根目录。这就是我想要在不切换到选项卡的情况下完成的任务。

0 投票
1 回答
9613 浏览

wpf - VisualTreeHelper.GetChildren 未找到 TabItem 的子项

我有以下 C# 代码来查找 DependendencyObject 的子项:

当我遍历底部发布的 XAML 中的 TabItems 时,将每个 TabItem 传递给上述方法,要求它查找所有扩展程序,它什么也不返回。此外,我在附加到每个选项卡项的 Loaded 事件的事件处理程序中发出此请求。



有人猜我的方法有什么问题吗?我没有在这个特定的自定义控件中尝试过,但是这个方法已被用于在另一个自定义控件中查找给定类型的子项。主要区别在于我要查找的项目是 TabItems 的子项。