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

c# - 如何将属性附加到控件或使用在 VisualTreeHelper.GetParent() 更改时更新的绑定?

我有一个Button我需要检测它是否进入 ToolBarOverflowPanel。

当前代码:

(逻辑:监控Children.CountAncestorType ToolBarPanel,发送到转换器,如果 value( ToolBarPanel.Children.Count) = FallbackValuethenToolBarPanel可能没有注册为 Ancestor,因为Button现在ToolBarOverflowPanel改为)

和 XAML:

这段代码的问题是当按钮进入ToolBarOverflowPanel.

但它一开始是有效的。我的结论是Children.Count没有提供更新通知。有没有办法解决它?

如何强制转换器更新?我需要什么样的绑定才能实现?

0 投票
1 回答
227 浏览

c# - 如何访问 WPF 中 ListBox 中 DataTemplate 中的控件

我有一个 ListBox,包括一个带有 StackPanel 的 ItemTemplate。我想访问该堆栈面板并更改其可见性。

(当我单击鼠标左键“closeAll”时将其可见性更改为折叠)

我可以使用 FindDescendantByName 方法做到这一点,但它仅适用于屏幕上的列表框项目(仅前 10 个项目),但是当我向下滚动时,我发现这不适用于其他列表框项目。

我认为发生错误是因为 VisualTreeHelper。我可以使用什么来代替 VisualTreeHelper?

谢谢..

XAML 代码

C# 代码

0 投票
3 回答
1829 浏览

c# - 如何从 WPF 中的可视化树中分离

我正在尝试UIElement从 anInlineUIContainer中正确删除 a 以便在另一个面板中使用它,但程序不断崩溃,并显示此消息“指定的视觉对象已经是另一个视觉对象的子对象或 CompositionTarget 的根。”。

我创建了一个小应用程序来说明我的痛苦。在这个程序中,一旦 Randy 按钮被他的女朋友杀死\删除,他仍然没有脱离他的父母,我发现他是UIElementIsland. 然后任何尝试将 Randy 添加为其他任何东西的孩子都会使应用程序崩溃(天启按钮证明了我的观点 :))。您可以在删除 Randy 之前/之后单击查看 Randy 的父母,以注意到他UIElementIsland小时候一直处于以下状态,如果他是分离的,整个问题\应该避免天启。

这是一个有趣的应用程序,所以即使只是为了好玩也可以复制和编译!任何帮助\想法将不胜感激!

C#部分:

XAML:

整个代码应该比这更短,但我对其进行了调味以使其有点有趣。希望我能照亮某人的一天。但是,请帮助我:)。

答案: 从 Randy's 派生InlineUIContainer如下:

现在你可以正确地杀死 Randy,并将他添加到 UIElement 天堂(The StackPanel):

谢谢大家。

0 投票
1 回答
280 浏览

c# - HitTest 和 RayMeshGeometry3DHitTestResult 在无窗口控制台应用程序中以编程方式

我需要执行一条线和一个三角形网格的交集。

如果我可以使用方法,该操作将非常方便地执行VistualTreeHelper.HitTest,该方法将返回一个RayMeshGeometry3DHitTestResult结构。

问题是:VisualTreeHelper.HitTest需要 aVisual和 a Point,而我只有 aVisual3DGeometry属性是 aMeshGeometry3D和一个Ray由 a Point3D(它的起源)和 a Vector3D(它的方向)组成的自定义类。

所以我想要的是:

指示);

但是该框架为我提供了:

从我读过的内容来看,通常所需的内容Visual3D会放在 aViewPort3DVisual中,并且Point会通过视口变换或类似的东西以某种方式转换为射线。

由于我没有任何 Window 以便我可以将 ViewPort3D 放入其中等,所以我不知道如何使用这些帮助程序来获得我需要的东西。

或者,如果有一个库可以做到这一点,我可以很乐意使用它来代替 WPF 的 3D 方法。

0 投票
1 回答
37 浏览

c# - 如何使找到特定类型的子用户控件的方法更通用?

在我的 WPF 应用程序中有一些案例要求我在给定的用户控件中找到特定类型的用户控件。例如,我有以下已经很好用的方法:

此方法将帮助我在给定的 ListViewItem 中找到 CheckBox,这使我可以更方便地选中/取消选中所述 CheckBox。

但是,我希望这种方法更通用,例如:

不幸的是,我不知道如何才能完成这项工作。有人可以帮忙吗?

0 投票
1 回答
108 浏览

wpf - WPF ViewBox 阻止 VisualTreeHelper 搜索

我已经为 MVVM-Light WPF https://stackoverflow.com/a/28968560/5272185尝试了这种导航服务方法(首先查看)

我意识到如果 Frame 位于 ViewBox 内,则 VisualTreeHelper 搜索 Frame 元素不会找到 Frame。

对这种奇怪的行为有很好的解释吗?有可能解决它吗?

0 投票
1 回答
328 浏览

c# - 按类型查找控件的祖先

UserControl在另一个中有一个“孩子” UserControl(在 a 中充当 TabItem TabControl)。在子UserControl元素和 TabItem 祖先之间是许多其他控件(例如:Grids、a StackPanel、可能是 aScrollViewer等)。

我想UserControl在我的孩子中访问 TabItem 的一个属性,UserControl并自定义一个通常 建议的递归函数,该函数沿着 Visual 树向上走。但是,这总是true在第一次空检查时返回,直到我在逻辑树上添加查询。

代码:

不幸的是,这也返回 null。当单步执行该方法时,我看到它确实找到了正确的UserControlTabItem,但是当它通过返回递归(?)返回时,它将它恢复为 null,然后返回给调用方法(在 childUserControl的 Loaded 事件中):

如何解决此问题,以便我的方法正确返回 found MyTabItem

0 投票
1 回答
149 浏览

c# - UWP VisualTreeHelper 参数错误参考

我想修改 aTabItem中的内容TabView。这TabItem使用DataTemplate.

当我尝试访问该项目的子项时,如下所示:

ArgumentException: Wrong Parameter Reference在第二行得到了。我应该如何使用 VisualTreeHelper 来修改它?

0 投票
1 回答
311 浏览

wpf - 即使矩形不在底层形状附近,VisualTreeHelper.HitTest 也会报告命中

我正在尝试在画布上实现 WPF Path 对象的橡皮筋选择。不幸的是,我使用带有矩形几何形状的 VisualTreeHelper.HitTest 并没有像我预期的那样工作。

我希望只有当我的橡皮筋矩形的某些部分与线的线路径相交时才会受到打击。但是对于矩形,只要我的矩形位于线的左侧或上方,我就会受到打击,即使我离线甚至边界框都不远。

有什么办法可以解决这个问题或者我做错了什么?

我写了一个简单的应用程序来演示这个问题。这是一条线和一个标签。如果我对 VisualTreeHelper.HitTest 的调用(使用橡皮筋矩形)检测到它超出了形状,我将底部的标签设置为可见。否则标签将折叠。

在这里,我就在这条线上,正如我所料,它检测到了命中。这很好。

成功命中如预期

在这里,我在线下,没有命中。这个也不错

下线,没有命中

但每当我在左边或线上的任何地方,无论多远,我都会受到打击

在此处输入图像描述

这是测试应用程序窗口:

这是带有 HitTest 代码的鼠标代码隐藏处理程序

0 投票
1 回答
92 浏览

c# - 调用 VisualTreeHelper.GetChild() 时出现 ArgumentOutOfRangeException

有时我会ArgumentOutOfRangeException遇到打电话的时候VisualTreeHelper.GetChild()

例外提到当等于 0 时不调用该方法VisualChildrenCount- 这是if调用之前应该做的事情。

我在这里遗漏了一些明显的东西吗?我也尝试访问contentPresenter.VisualChildrenCount,但该属性受到保护。

带有 AregumentOutOfRangeException 的代码。