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

c# - 如何将 WPF UIElement 从可视化树移动到 FixedPage?

我的 MVVM 应用程序使用屏幕上的视觉对象将屏幕内容呈现到打印文档中。我的视图有一个ContentControl使用DataTemplate资源来确定要显示的内容,但是当我尝试将该内容添加到FixedPage对象时,我收到一条ArgumentException消息:

指定的 Visual 已经是另一个 Visual 的子级或 CompositionTarget 的根。

处理打印的视图的(简化的)XAML 代码如下所示:

...并且有问题的打印按钮单击处理程序背后的代码如下所示:

我尝试了以下方法来解决问题,但均未成功:

  • 将 的Content成员设置ContentControl为 null(如上面的代码中所示)。
  • 设置this.Content=null。屏幕变为空白,但仍然出现异常。
  • RemoveLogicalChild()在各种控件上使用。这些都没有奏效。
  • RemoveVisualChild()printContentControlcontent对象上使用。它们都不是当前对象的子对象。
  • 当或为“{x:Null}”时,在 XAML 中使用DataTriggers 替换模板。没有效果。ContentDataContextContentControl

屏幕外观是否混乱并不重要,因为执行打印命令时ViewModel会发生变化。View

如何将printContentControl' 的可视内容(或整个控件)从View' 的可视树移动到ViewModel' 的FixedPage对象?

肮脏的解决方法

通过为要打印的内容创建一个包装类,我可以使功能正常工作,但它不能回答原始问题。

包装类

使用包装器更新 XAML 以保存可打印内容

更新了后面的代码以从包装器中获取可打印的内容

0 投票
1 回答
477 浏览

c# - WPF | 折叠的父级上的 VisualTreeHelper.GetChildrenCount(this)

我有一个“巨大的” Control,其中约 50% 是collapsed. 您可以通过属性切换以隐藏该visible部分并显示该部分collapsed

现在,当Control加载 s 时,我尝试在控件的and部分中找到所有FooControls 。问题是,只有零件的s被发现。如果我编写代码,我可以在折叠部分的父控件中看到s。visiblecollapsedFooControlvisibledebugFooControl

你能给我一个提示如何解决这个问题吗?

我需要在加载后Property更改一个。FooControl我还需要动态,因为它带有一个behavior.

0 投票
1 回答
848 浏览

c# - 如何将 DependencyObject 转换为 AutomationElement?

我正在使用返回DependencyObjects的VisualTreeHelper通过其 VisualTree 遍历 WPF 应用程序。

但是,一旦我找到我正在寻找的对象(在这种情况下它是一个按钮),我需要“按下”/调用它。我已经在AutomationElement上使用InvokePattern成功调用了一个按钮。

所以问题是:如何将 DependencyObjects 转换为 AutomationElement?
或者:我如何调用 DependancyObject?
或者:我如何创建一个指向与给定 DependencyObjects 剂量相同的 WPF 元素的 AutomationElement?

Edit1:
我发现我可以将 DependancyObject 转换为控件。

但是问题是:我如何调用控件?
或者:如何将控件转换为 AutomationElement?

0 投票
1 回答
918 浏览

wpf - Datagridcolumn:通过 BindingProxy 绑定可见性和宽度显示不同的行为

由于数据网格的列不在数据网格的可视化树中,我正在使用这种绑定代理方法来绑定DataGridTextColumn.

https://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/

出于某种原因,我想了解相同的方法确实适用于列的属性,Visibility但不适用于列的Width属性。有人可以向我解释这种不同的行为吗?

代码示例

C#

只是为了更容易复制

xml

只是为了让你知道我最初的目标是什么。我想将所有列的宽度设置为自动,但在绘制数据网格期间使用“最大”列宽度。但是,用户应该可以调整超过此限制的大小。这就是为什么我不能使用MaxColumnWidth所以我认为实现这一点的最简单方法是读取每一列的宽度,如果它大于限制,则将其设置为“最大值”。

0 投票
0 回答
113 浏览

wpf - WPF:每个视觉树也是视觉树和逻辑树的组合吗?

据我了解,逻辑树始终是 WPF 中某些元素的可视化树的子集。从技术上讲,两者之间的区别在于它们是分配给Template元素的属性(=视觉)还是分配给Content,Children或其Child属性(=逻辑)。

我想知道的是:在我分配给Template属性的可视化树中,我可以再次递归地拥有逻辑树和可视化树,因为我可以简单地再次分配可视化树TemplateContent后代。

这是真的吗?如果是这样,内部视觉/逻辑树的属性(如依赖属性继承)与最外层的有何不同?

0 投票
1 回答
769 浏览

visual-studio - Visual Studio 2017 Live Visual Tree 不起作用

我无法在Visual Studio 2017中为 UWP 应用 (C#)启用Live Visual Tree 。该工具在 VS2015 上运行,但在 VS2017 中从未对我有用。它对我的 WPF 项目没有任何问题。

我收到以下错误消息Live Visual Tree

UI 调试需要最新版本的 SDK 和通用 Windows 应用开发工具。确保已安装这些工具以启用 UI 调试。

我尝试了什么:

  1. 确保Enable UI Debugging Tools for XAML已签入Options/Debugging
  2. 重新安装Windows 10 SDK (10.0.15063.0) for UWP: C#, VB, JS

我在 web 或 Stack Overflow 中找不到有关该问题的任何信息(与VS 2017相关,尽管找到了一些有关 VS2015 的信息)。请帮忙。

0 投票
1 回答
149 浏览

c# - How to find the Parent of a CustomControl from inside the CustomControl

I have a class which extends Canvas in WPF.

This class is placed in a ScrollViewer.

Without passing a specific reference to the ScrollViewer into the Canvas, I want to find the ScrollViewer which contains the Canvas from within the Canvas itself.

The Parent property of the class which extends Canvas is null, and every attempt to use the VisualTreeHelper just returns null as well.

I have attempted to find the visual ancestor using VisualTreeHelper.GetParent(this), however the parent property is null.

As the ExtendedCanvas will be used in multiple instances, I would like it to be able to resolve its containing ScrollViewer without the need to specifically reference the ScrollViewer in either code behind or in XAML.

I realise that I could add a dependency propery in the ExtendedCanvas and create a binding in the XAML, however I would like the component to work by simply dropping it into a container.

Similarly, I would not be averse to placing the ScrollViewer onto a panel of some sort, then placing my ExtendedCanvas within it, so that my component uses that panel as its lowermost containing element.

What is puzzling me is that as I understand it, the VisualTreeHelper will navigate the entire visual tree for the running application. It seems that either my assumption is entirely wrong, or it can only navigate downwards from the specified component.

Is this possible to achieve without the above approaches?

Example Code:

cs -

xaml -

0 投票
0 回答
37 浏览

c# - 为什么我无法获取外部应用程序的 RootVisual?

我正在开发 WPF 中的自动化测试框架。我发现虽然可以使用基本的 WPF 自动化框架来自动化大多数事情,但很难深入了解 UI 级别正在发生的事情的细粒度细节。我需要能够查看诸如 DataContext 的属性、控件的属性等内容。我知道这是可能的,因为 Snoop 可以做到。Snoop 允许您遍历任何 WPF 应用程序的整个可视化树。我需要这个功能。所以,我写了这段代码:

代码一直运行到倒数第二行。倒数第二行返回 null,但我不知道为什么。返回 windowHandle,但不返回 HwndSource。这里出了什么问题?

0 投票
1 回答
35 浏览

c# - 如何获取 DataGridTemplateColumn 的底层(文本框)控件

我使用此代码将 TextBox 添加到 DataGrid 单元格:(不,我不能在这里使用 XAML)

我有没有办法在没有 XAML 的情况下获得底层的 TextBox 控件?

我尝试了什么:

  • VisualTreeHelper,但 GetChildrenCount() 始终为 0
  • FindName,但我没有找到合适的FrameworkElement
0 投票
1 回答
27 浏览

wpf - WPF在可视化树中查找文本块的列索引

我想在 这里计算输入图像描述 内容演示器内的文本块的自动化 ID。我的视觉树看起来像这样-