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

wpf - 绑定元素名称。它使用可视树还是逻辑树

有了{Binding ElementName=foo},它会查找视觉树还是逻辑树?

WPF 中的逻辑和可视化树 数据看,数据做

逻辑树何时重要?

在查找名称时,例如在 {Binding ElementName=Foo} 中,搜索会沿着祖先查找名称范围,就像它对可继承属性所做的那样。

通过附加行为在 Silverlight 中绑定 ElementName

为了实现这一点,WPF 提供了 ElementName 和 RelativeSource 绑定,为您提供了一种强大的机制来定位可视树中的其他元素以绑定到

编辑:

它看起来像用于绑定的逻辑树ElementName

论据#1。

根据 MSDN 文章FrameworkElement 类

FrameworkElement 扩展了 UIElement 并添加了以下功能:

  • 对数据绑定和动态资源引用的支持:对数据绑定和资源的属性级支持由 DependencyProperty 类实现并体现在属性系统中,但能够解析存储为表达式的成员值(编程构造作为数据绑定和动态资源的基础)由 FrameworkElement 实现。有关详细信息,请参阅数据绑定概述和资源概述。

论点#2。

ElementName指向x:Name,所以应该如何找到这个名称。有一个NameScope概念。

对于大多数情况,在 FrameworkElement 和 FrameworkContentElement 上公开的 FindName 方法是更适合调用以按名称搜索元素的方法。FrameworkElement 和 FrameworkContentElement 公开的 Name 属性更适合用于将初始名称设置为标记属性。并且在 FrameworkElement 和 FrameworkContentElement 上公开的 RegisterName 方法对于在特定名称范围内建立名称是必要的(没有 NameScope 成员可以直接执行此操作;您必须先设置当前名称范围才能使用 RegisterName)。

另一方面,Visual 类既没有FindName方法,也没有实现INameScope

0 投票
2 回答
4396 浏览

wpf - WPF:为什么 DataContextChanged 没有在逻辑孩子上提出?

我的自定义面板控件的逻辑子级没有引发DataContextChanged的​​问题。我把它缩小到这个:

从向导生成的 WPF 应用程序开始,我添加:

据我了解,这是有效的,因为DataContext是一个可继承的依赖属性

现在,我在 Window (this) 及其逻辑子项上为DataContextChanged添加事件处理程序:

如果我运行它,只会执行第一个事件处理程序为什么是这样?如果不是 AddLogicalChild( elt ) 我执行以下操作:

两个处理程序都将执行。但在我的情况下,这不是一个选项 - 我将 FrameworkContentElements 添加到我的控件中,这些控件不应该是可视子项。

这里发生了什么?除了 AddLogicalChild() 之外,我还应该做更多的事情来使它工作吗?

(幸运的是,有一个相当简单的解决方法——只需将元素的 DataContext 绑定到窗口的 DataContext 即可)

谢谢你。

0 投票
1 回答
1383 浏览

wpf - WPF 优化:xaml 中的逻辑树,它们是如何构建的?

我一直在分析我的应用程序并发现很多延迟是由于 WPF 初始化造成的。我发现一篇关于WPF 优化的文章说,自上而下构建逻辑树将比自下而上构建具有更好的性能。文章中的示例是用 C# 编写的。我想知道,当 UI 在 XAML 中完成时,它是如何构建树的?

0 投票
0 回答
5917 浏览

.net - 视觉树和逻辑树的概念

我理解Visuallogical树的概念,但我仍然无法理解这些的真正用途和需求。虽然没有必要了解这些树的所有信息,但我相信它会在一些高级场景中受益。

我已经阅读了以下文章并理解了这些概念

http://www.codeproject.com/KB/WPF/WpfElementTrees.aspx

http://blogs.msdn.com/b/mikehillberg/archive/2008/05/23/of-logical-and-visual-trees-in-wpf.aspx

我想了解的是在框架内使用这些(用简单的话和易于理解的场景)?您究竟是如何确定何时使用视觉树或逻辑树的?任何其他有助于可视化这些树的信息?

0 投票
1 回答
3775 浏览

wpf - 查找包含隐藏节点和折叠节点的逻辑子节点

我试图找到这个问题的答案,在每一篇文章中我都找到了递归查找孩子的答案,但他们都没有与隐藏或崩溃的孩子一起工作

同样在每个帖子中,有人问这是否可能,但没有人回答,所以我开始认为这是不可能的

如果有人有办法做到这一点,我将永远感激不尽。

我的功能如下所示:

- 编辑所以,我意识到我的问题是我试图在创建项目之前找到它,

我正在绑定到 xaml 中的一个属性,该属性会关闭并按给定名称查找项目,但该项目当时没有创建,如果我在 xaml 中重新订购该项目,它可以工作并找到该项目。 .. 哦!

0 投票
2 回答
2140 浏览

wpf - 为什么在父元素成功的情况下将子元素绑定到另一个元素时绑定失败?

假设我有两个类可以引用第三个 UI 对象(在本例中为按钮)。

此外,父类可以包含子类的元素。

如果它们都绑定到同一个控件,以同样的方式,孩子会失败,但父母会成功。

这是 WPF 中的错误吗?


家长:


然后是孩子:

好的 -

现在说我像这样将它们添加到我的 XAML 中:

当我使用完全相同的表示法时,为什么绑定在父级上有效,但在子级上失败?


这是我的测试代码...

这是测试结果...

父按钮引用是 System.Windows.Controls.Button

子按钮引用为空!

0 投票
4 回答
3784 浏览

algorithm - 评估嵌套逻辑表达式的算法

我有一个想要评估的逻辑表达式。表达式可以嵌套,由 T (True) 或 F (False) 和括号组成。括号“(”表示“逻辑或”。两个术语 TF 并排(或任何其他两个并排的组合)应为 ANDED(逻辑与)。

例如,表达式:

我需要一个算法来解决这个问题。我想首先将表达式转换为析取或合取范式,然后我可以轻松地评估表达式。但是,我找不到使表达式标准化的算法。有什么建议么?谢谢你。

问题陈述可以在这里找到: https ://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=2&category=378&page=show_problem&problem=2967

编辑:我误解了部分问题。在给定的逻辑表达式中,AND/OR 运算符与每个括号“(”交替出现。如果我们要用树来表示表达式,那么 AND/OR 运算符取决于子树的深度级别。但是,它是最初考虑到最深层次的树是与树。我的任务是可能通过构建树来评估给定的表达式。感谢下面的答案澄清了问题的正确要求。

0 投票
1 回答
1068 浏览

c# - WPF - PreviewMouseLeftButtonDown 找到 e.OriginalSource 的视觉拥有控件

很简单的问题。

我已附加到 PreviewMouseLeftButtonDown 事件。我知道这个事件隧道,所以视觉树中的第一项将被标记为 e.OriginalSource。

例子:

我有一个名为“MainGrid”的网格。此 Grid 包含一个标签。

如果我在该网格上设置 PreviewMouseLeftButtonDown 事件并单击标签,则将触发 PreviewMouseLeftButtonDown 事件。

为此,MouseButtonEventArgs 包含一个 OriginalSource (e.OriginalSource)。根据我在标签内单击的位置,这可能是一个边框……这可能是一个文本块,也可能是一个边框。

我想走可视化树并找到“MainGrid”。我知道执行此操作的递归方法,但是如果我不知道所有者的类型怎么办。我只知道我想找到所有者(即这需要是通用的)。

类似“e.OriginalSource.ORIGINAL_OWNER”的东西

如果不清楚,将很乐意详细说明。

谢谢

0 投票
1 回答
585 浏览

c# - 如何在逻辑树和可视树中将 MenuItem 附加到父 MenuItem?

我创建了几个 MenuItems(不在 XAML 中),所以我将它们添加为父项:

然后我通过 VisualTree 列表(循环)应用了我的样式。但是这些样式不适用于新的 MenuItems 。这是我的风格应用代码:

父菜单项获得了样式,但没有新的子菜单项。所以我只是用调试器检查了哪些项目通过可视化树链接到父项目,我在父项目中找不到新的子项目。我猜它们在逻辑树中也没有链接到父级。

我检查了新子项在全局视觉\逻辑树中的位置,正如我从调试器中了解到的那样,它们没有链接到任何不在视觉树中的父项,也不在逻辑树中,甚至没有链接到窗口本身。

我的结论是,它们仅通过“项目”列表与父 MenuItem 相关……这与 MenuItems 自动成为父菜单控件的子项不同。

有人知道如何使动态创建的 MenuItems 成为可视树中父级的子级吗?

0 投票
1 回答
476 浏览

c# - 尝试创建一种递归方法以分层顺序列出逻辑依赖项

我使用了VisualTree帮助程序来获取窗口中的所有视觉效果,但有时某些控件未在返回列表中列出。那是因为它们仍然没有被渲染,据我所知,VisualTree只有当控件已经被渲染时,枚举才会有所帮助。

现在我正在尝试编写一个简单的递归方法,它将在一个窗口中列出所有逻辑对象,以便我可以在它们被渲染之前对其进行操作。

所以这是我第一次尝试为逻辑树创建这样的东西: