问题标签 [visual-tree]

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 投票
1 回答
58 浏览

c# - 如何从同一个 ListBoxItem 的 DataTemplate 创建的按钮访问 ListBoxItem

问题

鉴于这段代码,我想在按下它时访问ListBoxItem包含 a的属性(更具体地说,它的索引)。Button我认为我需要获取Button' 的父级(它是一个StackPanel),然后是它的父级TemplatedParent,然后沿着 Visual Tree 向上走,但我不知道两件非常重要的事情:如何有效地解决我的问题,这是否真的解决了我的问题。

XAML

C夏普

我的一段代码可以正常工作

我认为可能是答案(不工作)

0 投票
1 回答
547 浏览

c# - 重置用户控件 WPF 的视觉偏移

有一个树视图,其节点绑定到用户控件,这些用户控件是在选择时使用视图注入加载的。此时控件的视觉偏移设置为 (0,0)。有没有办法我以后可以改变这个视觉偏移。O 取消选择此控件时,如何从视觉树中卸载此控件,以便将此视觉偏移设置为默认值。

0 投票
0 回答
122 浏览

c# - 捕获对父视觉树的更改

从 WPFFrameworkElement中,如何捕获从根到可视化树路径的任何更改FrameworkElement即,何时将FrameworkElement或其任何父级添加到视觉树的另一个分支,从中删除或移动到另一个分支?

  • 我一直在寻找合适的事件,但是虽然FrameworkElement有一个OnVisualParentChanged方法,但它没有提供一个相应的事件,可以在不继承框架元素的情况下注册处理程序。因此,这不能应用于任意的、已经实例化FrameworkElement的 s。
  • 理论上,ARelativeSource绑定在这里应该对我有帮助,但要让它工作,我已经需要知道我在寻找哪个父节点(什么类型,什么级别),但事实并非如此(见下文)。

用例:对于另一个问题,一个有希望的可能解决方案是使用当前NameScope相关的 a FrameworkElementNameScope可以从NameScope附加属性中检索适当的实例,但它不是为树中的每个节点设置的,仅用于从控件模板窗口构造的可视树的根。

因此,要找到适合NameScope我的FrameworkElement,我需要沿着可视化树向上走,直到找到一个null为附加属性设置了非值的节点NameScope,并且我必须重做此操作以可能NameScope每次更新我上面的视觉树FrameworkElement已经改变。

这个讨论涉及到这个话题,但它已经 6 岁了,没有解决方案。

0 投票
1 回答
1271 浏览

c# - 如何在 TabItem 加载时初始化 TabItem 内容?

有没有办法在标签加载时初始化标签内容?我遇到了一个问题,当创建 Tab 时,它不会立即初始化它的组件。只有当我单击 Tab 时,才会显示内容。

按钮点击事件

0 投票
1 回答
191 浏览

wpf - 将视图模型弹出到单独的窗口(如 Chrome 选项卡)

我的应用程序由一个带有各种视图模型的窗口组成,这些视图模型显示图形/图表/表格等。我的用户已经决定他们希望能够弹出一个图表并将其显示在自己的窗口中,类似于你可以如何拖动一个选项卡Chrome 或 Visual Studio 外的停靠视图,以在其自己的窗口中查看它。

我想避免生成视图模型的新实例以在新窗口中使用。

有没有办法在将视图模型从一个窗口移动到另一个窗口时保留它?有没有一种方法可以轻松地从一个可视化树中删除相应的视图并将其添加到另一个?

更新:

我查看了 AvalonDock,但它并不是我想要的。我只想将现有的视图模型从 UI 的一部分移动到窗口。有任何想法吗?

0 投票
1 回答
6784 浏览

c# - WPF使用VisualTreeHelper垂直和水平查找元素

在可视化树中垂直和水平搜索最简单的方法是什么?

例如,我想从控件中找到不在父列表中的控件,从而开始搜索。

这是一个简单的示例(每个框代表一些 UI 控件):

视觉树

例如,我从一个嵌套控件(Search-Start)开始,并希望找到另一个嵌套控件(应该找到)。

做这个的最好方式是什么?解析完整的视觉树似乎不是很有效...谢谢!

0 投票
1 回答
1299 浏览

c# - 递归查找视觉孩子不是在WPF中添加根对象吗?

我有以下实现来获取类型 T 的 VisualTree 中的所有子项:

我使用以下方法调用此方法:

但是,当根依赖对象的类型为 T 时,此实现无法正常工作。假设我们想要在 VisualTree 中查找所有 TextBlock

在这种情况下,实现成功地找到了 TextBlock。但是,如果我有这个其他布局:

该实现不包括根对象,因此它找不到 TextBlock。如何重新编写方法并包含根对象?

0 投票
1 回答
154 浏览

wpf - 如何在 WPF Datagrid ColumnHeader 中找到图像以便更改图像?

我正在尝试实现类似 Excel 的列过滤和排序。为此,我使用了 DataTemplate 来定义列标题。

结果很好

我尝试使用 VisualTreeHelper 从列标题中查找图像,但 Header 属性是一个字符串。我也尝试过使用 HeaderStyle 和 HeaderTemplate 属性,但无济于事。

使用名为 Snoop 的 WPF Spy 程序,我可以在其中看到图像,但仍然无法弄清楚如何在代码中访问它。我需要在代码中访问它的原因是根据该列是否已排序和/或过滤来更改图像。(这可以在 XAML 中完成吗?)

0 投票
0 回答
568 浏览

c# - 如何在WPF中设置当前窗口的所有可见和可聚焦控件的TabIndex

单击按钮后,我试图遍历可视树并列出当前窗口的所有可见和可聚焦组件控件(例如按钮、图像、文本框等),并将它们的 TabIndex 设置为某个值。然而,一些控件没有被列出或者 tabIndexes 没有被设置!

这是我从这里采用的课程

这就是它的名称

0 投票
0 回答
181 浏览

wpf - 在 Visual Studio 2015 中为“Live Visual Tree”选择窗口

我有一个包含 2 个 WPF 应用程序的 Visual Studio 2015 解决方案。当我在调试模式下运行解决方案时(按 F5),这两个应用程序都会启动。我正在使用 Visual Studio 2015 附带的新 Live Visual Tree 窗口,但它只显示其中一个应用程序的可视化树。

有没有办法选择另一个视觉树,甚至同时查看它们?