问题标签 [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.
wpf - 为什么 AdornerLayers 总是最顶层?有没有办法改变它?
- 为什么装饰层总是呈现为应用程序中的最顶层(在 AdornerDecorator 下 - 参考屏幕截图)?
- 有没有办法改变可以绘制装饰器的图层/级别?
在下面的屏幕截图中,AdornerLayer 被添加到 AdornerDecorator 并且 Adorner (MyAdorner) 被添加到这个 AdornerLayer。但是 AdornerLayer 是这样检索的,
wpf - ContentControl 在不知道名称的情况下获取 DataTemplate 中的所有元素?
我想获得一个包含我当前用户控件的所有元素的列表。不仅LogicalTree中的一个,用户控件中定义和使用的数据模板中的所有元素。
当 iam 迭代抛出 VisualTree 时,它在 ContentControl 中没有 VisualTree 项。我认为 VisualTree 包含所有元素?
所以最后我需要在我的列表中的 DataTemplate 中的 TextBox 和 Button。但我不知道元素的 x:Name。
有人可以帮忙吗?
在代码中,当 UserControl.Loaded 事件被触发时,我迭代抛出它......
c# - WPF - PreviewMouseLeftButtonDown 找到 e.OriginalSource 的视觉拥有控件
很简单的问题。
我已附加到 PreviewMouseLeftButtonDown 事件。我知道这个事件隧道,所以视觉树中的第一项将被标记为 e.OriginalSource。
例子:
我有一个名为“MainGrid”的网格。此 Grid 包含一个标签。
如果我在该网格上设置 PreviewMouseLeftButtonDown 事件并单击标签,则将触发 PreviewMouseLeftButtonDown 事件。
为此,MouseButtonEventArgs 包含一个 OriginalSource (e.OriginalSource)。根据我在标签内单击的位置,这可能是一个边框……这可能是一个文本块,也可能是一个边框。
我想走可视化树并找到“MainGrid”。我知道执行此操作的递归方法,但是如果我不知道所有者的类型怎么办。我只知道我想找到所有者(即这需要是通用的)。
类似“e.OriginalSource.ORIGINAL_OWNER”的东西
如果不清楚,将很乐意详细说明。
谢谢
c# - 如何在逻辑树和可视树中将 MenuItem 附加到父 MenuItem?
我创建了几个 MenuItems(不在 XAML 中),所以我将它们添加为父项:
然后我通过 VisualTree 列表(循环)应用了我的样式。但是这些样式不适用于新的 MenuItems 。这是我的风格应用代码:
父菜单项获得了样式,但没有新的子菜单项。所以我只是用调试器检查了哪些项目通过可视化树链接到父项目,我在父项目中找不到新的子项目。我猜它们在逻辑树中也没有链接到父级。
我检查了新子项在全局视觉\逻辑树中的位置,正如我从调试器中了解到的那样,它们没有链接到任何不在视觉树中的父项,也不在逻辑树中,甚至没有链接到窗口本身。
我的结论是,它们仅通过“项目”列表与父 MenuItem 相关……这与 MenuItems 自动成为父菜单控件的子项不同。
有人知道如何使动态创建的 MenuItems 成为可视树中父级的子级吗?
wpf - 如何遍历弹出窗口上的所有控件
我正在尝试从DatePicker
控件中获取“PART_HeaderButton”,然后应用自定义样式。问题是我无法搜索可视化树来找到这个标题按钮。日历在弹出窗口中。似乎当弹出窗口打开时会创建一个新的可视化树。
我的问题是如何访问新生成的可视化树并进行循环搜索?
wpf - 如果出现“必须在附加到新父 Visual 之前必须从当前父 Visual 断开指定子视觉”异常,如何调试视觉树
您如何调试以下错误?
在附加到新的父 Visual 之前,必须断开指定子与当前父 Visual 的连接。
我确定我理解了这个的意思,Exception
但如果我错过了一些重要的事情,我认为这意味着:
一个基于的对象FrameworkElement
确实已经存在于可视树中的某个地方,我正试图将它再次添加到树中的其他地方。
要解决这个问题,我有 2 个选项:
- 将其从视觉树中的当前位置删除,或
- 根据我的实现克隆它。
到目前为止一切顺利,但为什么这Exception
不能告诉我需要修改什么类型的孩子?因为如果您尝试使用的对象包含多个子对象,您必须在每个类中查找才能找到抛出 this 的对象Exception
。
有没有简单的方法可以找到对象?我认为堆栈跟踪并不是很有帮助。
这里是堆栈跟踪:
c# - 如何增加 WPF 中矩形的命中测试半径?
假设我有一个这样的矩形:
这适用于对 MouseUp 事件的矩形本身进行命中测试。但是,矩形的典型宽度是 1px 宽,因此很难单击矩形的边缘。我想让矩形笔画的“有效点击边框大小”大于该笔画的视觉外观。(例如,假设矩形被绘制为 1px 宽,但鼠标点击区域实际上是 3px 宽)
这样的事情可能吗,还是我被迫增加矩形笔画的厚度?
wpf - 在可视化树中查找控件
我正在尝试从 DataTemplate 获取我的 SelectedRadioButton。
Wpf Inspector 显示了可视化树:
在代码中:
item
是一个 ContentPresenter,看 Wpf 检查器的图像,我相信从那里我必须能够到达 SelectedRadioButton。该变量control
始终为空。
我在这里想念什么?我使用这些visualtreehelpers。
wpf - 多个内容,Parent 为空
我正在尝试实现一个承载两个内容区域的 UserControl。一个用于按钮区域,一个用于通用内容区域。但是,当我尝试使用它时,附加的 ButtonArea 没有 Parent 集,因此 RelativeSource Lookup 失败。只有在弹出窗口中使用控件时才会出现此问题,如果在弹出窗口中未使用控件,则一切正常。
这是 UserControl 的控制模板:
这是绑定日志:
如您所见,查找适用于普通内容,但对于其他按钮区域内容,它会失败。例如,当我使用 Canvas 而不是 Popup 并尝试在 Canvas 上设置一些属性时,它会起作用。当我调试时,我可以看到 VisualTreeHelper.GetParent 为网格返回 null。有人知道为什么在使用 Popup 时会失败吗?
c# - WPF容器将所有子控件变为只读
我想要一个 WPF 容器(面板、用户控件等),它公开一个属性以将所有子项设置为只读(如果已设置)。这应该很像将父控件设置为 IsEnabled=false,这也会禁用所有子控件。应该考虑哪些子项和它们的哪些属性是固定的(例如 TextBox.ReadOnly、DataGrid.ReadOnly、...)。
我试图创建这样一个控件,它本质上迭代可视树的所有子级(递归)并相应地处理控件。
这工作正常,除了进一步更改会影响视觉树的情况,以便添加新的孩子。这适用于 ContentControl 或 ItemsControl。如果在我浏览完孩子之后将它们添加到视觉树中,它们显然不是只读的。
我一直在试图找到一个好的事件来做出反应(基本上是在视觉树中检测到新的孩子),但找不到合适的东西。UpdateLayout 被触发,但每次都经常通过可视化树。
有没有办法解决这个问题?是否有另一种方法可以通过父元素上的绑定将所有(相关)子级递归设置为只读?
(不:我不想将所有子级只读属性绑定到全局绑定。关键是要有一个将其传播给所有子级的元素/部分)