问题标签 [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 回答
2909 浏览

c# - 为什么 VisualTreeHelper.GetChildrenCount() 为 Popup 返回 0?

我将焦点移到 Popup 的开幕式上:

FocusHelper 类代码:

ElementTreeHelper 类部分:

问题是 var count = VisualTreeHelper.GetChildrenCount(parent) == 0 当 parent 是 Popup 时。

更新

答案在这里

0 投票
1 回答
229 浏览

c# - 用于页面框架的 C# WPF VisualTree

使用 WPF、C# 和选项卡式页面窗口。我正在尝试循环浏览表单上的所有控件,但使用 VisualTreeHelper 无法做到这一点。

如果我有一个带有 TabControl 的窗口,并且该选项卡控件上有三个 TabItems,那么从视觉上看,一切正常......

但是,如果我尝试使用可视化树助手,它只会根据活动的单个页面公开内容,而不是所有可能的页面。

关于如何确认所有页面上的内容的任何想法,即使一次只能“可见”一个?

我希望它是我想念的非常简单的东西......

0 投票
1 回答
184 浏览

c# - Silverlight 自定义效果,获取父级

我正在尝试通过从Effect继承来创建自定义效果。

问题出在我的效果代码中。我无法获得效果属性的父级,在这种情况下,就是那个椭圆。您不能使用VisualTreeHelper,因为在构造 GlowEffect 时(在其构造函数中),椭圆不会加载到可视树中。我还没有找到解决这个问题的方法,或者我只是以错误的方式解决这个问题。

0 投票
3 回答
2426 浏览

c# - VisualTreeHelper 没有找到 DependencyObject 的子项,我怎样才能可靠地找到对象?

我有一个名为ZoneContainer. 这有一个属性,它包含一个ListBox包含多个ListItems 的属性。每个 ListItem 包含一个DockPanel.

我正在尝试使用以下代码来查找内部存在ZoneContainerchildrenCount每次都为 0 的孩子。

是否有另一种方法可以在对象列表中找到特定的子对象?最终我试图找到 DockPanel,但它没有找到任何孩子,即使我知道他们在对象中。

0 投票
2 回答
1773 浏览

wpf - 为什么 ItemsControl 的容器的 Parent 属性返回 null 而不是它所在的 Panel?

这个让我难住了。我们有一个自定义 ItemsControl,它使用自定义容器和自定义面板作为其 ItemsHost。现在,面板具有容器渲染所需的一些指标。由于它们是可视树中面板的直接子级,您可能会认为容器的 Parent 属性会返回面板,但事实并非如此!

我还在标准 ListBox 上使用 Snoop 确认了这个确切的事情,所以这不是我们的代码所独有的,而是显然所有 ItemsControls 容器。

现在我知道我可以使用 VisualTreeHelper 来获取可视父级(这是我需要的),但为什么父级不是面板?

如果参数是面板只是可视树的一部分,而父级是为逻辑树保留的,那么父级不是 ItemsControl 吗?

如果容器的参数也是 ItemsControl 的可视化树而不是逻辑树的一部分,那么为什么容器中托管的内容会将容器作为其 Parent 属性返回?

这意味着如果您从数据项遍历逻辑树,您会在容器处停下来,这可以解释为什么我们从容器到面板的绑定没有按预期工作。(我相信绑定是基于逻辑层次结构而不是视觉层次结构,但我必须进行测试才能确定。)

0 投票
1 回答
1017 浏览

c# - 迭代 wpf 控件

我对 C# 很陌生,我又迷路了。我讨厌问这个问题,但我对理解它是如何工作的非常迷茫。我正在尝试遍历 WPF 表单上的 TextBoxes 以清除数据。
我所有的文本框都有前缀“TextBox”,它在一串6个字符之前,即(TextBox3N1W09,TextBox3N1W10 ...)。我想我想使用 VisualTreeHelper,但我不够聪明:
#1)传入一个变量。我想我了解父级,

XAML < 网格名称="ThisGrid" >

在我的情况下,我将网格命名为:“ThisGrid”,但我不明白如何传入文本框,我不知道是否需要通过文本框的名称进行迭代并将它们作为字符串传递,或者我是否需要可以简单地让 VisualTreeHelper 查看网格中的所有文本框。
#2)一旦传入这些文本框名称或文本框对象,我不确定如何处理结果:

{
将孩子返回为 T;
}

我完全不知道“T”是什么,我该怎么处理“T”?我需要在方法中做某事还是从我调用该方法的地方做某事。就像我一开始说的,我只想清除文本框,这似乎并不难,但我玩得很开心。

0 投票
1 回答
567 浏览

c# - 从 VisualTreeHelper.HitTest 访问 FrameworkElement 的子类

我有一个自定义元素类,它是FrameworkElement.

UI 拥有一个画布,其中添加了这些自定义绘图元素并执行命中测试。

此代码按预期工作,但我找不到确定检测到的 DrawingVisual 属于哪个 MyCustomElement 的方法。现在,不透明度调整只是表面上正确吗?我想更改 MyCustomElement 上的 opacity 属性,让 MyDrawingRoutines() 方法应用它,并且只在 Canvas 上绘制完成的 DrawingVisual。

0 投票
3 回答
953 浏览

wpf - 鼠标下直接LogicalTree控件没有VisualTree

这是一个 WPF 应用程序。

我试图直接在鼠标下方进行控制,事实证明这是一种令人惊讶的痛苦。

Mouse.DirectlyOver、InputHitTest 和 VisualTreeHelper.HitTest 都引用了 VISUAL 树。我试图抓住控制本身。

示例:如果我有一个 TextBox 并使用上述任何一个,它将返回一个 TextBoxView 而我想要 TextBox 本身。

这发生在 PreviewLeftButtonDown 事件中。Sender 不是一个选项,因为 Sender 对我来说始终是 ListViewItem。如果我检查 e.OriginalSource 它仍然是 VisualTree 元素而不是实际控件。

如果需要,很乐意进一步解释。

谢谢

0 投票
1 回答
3414 浏览

c# - LogicalTreeHelper.GetChildren - ObservableCollection Move() 导致 DataTemplate 中的 ContentControl 丢失其内容?

这很奇怪。下面代码的重点是支持 attachProperty,如果容器的任何子项已获得焦点,它将通知容器。

即,我在其内容中的某处有一个带有文本框的网格,如果其中一个控件获得焦点,我想将网格变为蓝色。

我有一个带有 ItemsTemplate 的 ListView。ItemsTemplate 是一个 DataTemplate,其中包含一些东西……但其中之一是 ContentControl。

例子:

ContentControl 上的 Binding 应该显示某种类型的 UserControl。创建后...工作得很好。如果我从 Grid 元素开始递归迭代 listViewItem 的模板......它也会遍历 ContentControl 的“内容”。

但是...一旦我对 ListView ItemsSource 绑定到的 ObservableCollection 执行 .Move(),根据 LogicalTreeHelper,ContentControl.Content 为空。

是什么赋予了?

如果我检查 ContentControl,它会向我显示内容......但 LogicalTreeHelper.GetChildren 返回并清空枚举器。

我很困惑...

谁能解释为什么会这样?

LogicalTreeHelper 迭代器方法

0 投票
0 回答
140 浏览

c# - 为什么 ItemsControl 容器上的 Visual Tree 是空的?

我有一个要求可以访问任何给定视图中的特定视觉元素。这对于 xaml 中静态声明的项目很容易,因为它们随时可用。但是,数据模板化的 ItemsControls 在运行时生成它们的可视化树。例如,TabControl绑定到子 ViewModel 的 Collection。

一旦视图由ItemContainerGenerator. 我尝试连接到 上的StatusChanged事件ItemContainerGenerator并且它成功触发,并且我可以成功获取(在 a 的情况下TabControlTabItem容器。但是,当我使用它VisualTreeHelper来获取它的孩子时,它是空的。

有什么原因导致的视觉树TabItem是空的?是否有另一个事件我应该挂钩来实现这一目标?