gpt4 book ai didi

wpf - 在 VisualTreeHelper 中看不到用户控件内的控件

转载 作者:行者123 更新时间:2023-12-02 04:02:15 26 4
gpt4 key购买 nike

我在 wpf 4.0 中有 UserControl,其中包含按钮、标签、文本框等......
我想循环这些控件,当我得到一个按钮时,我想取它的名字并将其保存到我的列表中。基本上,我要做的就是在 UserControl 中创建一个包含所有按钮的 Names_list。

我有一个迭代所有控件的方法,如果它找到一个按钮,它会保存它的名称 -

  public void EnumVisual(Visual myVisual)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(myVisual); i++)
{
// Retrieve child visual at specified index value.
Visual childVisual = (Visual)VisualTreeHelper.GetChild(myVisual, i);

Button _button = childVisual as Button;
if (_button != null)
{
Class_Button _newButtonClass = new Class_Button();
if (_button.Name != null)
{
_newButtonClass.ButtonName = _button.Name;
}
ButtonsList.Add(_newButtonClass);
}

// Enumerate children of the child visual object.
EnumVisual(childVisual);

}
}

我总是得到一个空列表。
当我通过调试输入代码并查看我的 UserControl 的 VisualTree 时,我看到了所有的 Panels 和 GroupBoxes 和 Grids 但我没有看到按钮、标签和 texboxes,尽管每个控件都有一个 x:Name 并且每个控件都是 x:字段修饰符 =“公共(public)”。这很奇怪......而且我无法理解其原因以及如何解决这个问题......
谁能告诉我做错了什么?
谢谢

最佳答案

正如@GazTheDestroyer 所建议的那样,您要确保在尝试使用 VisualTreeHelper 之前已应用控制模板。尝试:

public void EnumVisual(Visual myVisual)
{
if(myVisual is FrameworkElement)
((FrameworkElement)myVisual).ApplyTemplate();

for (int i = 0; i < VisualTreeHelper.GetChildrenCount(myVisual); i++)
{
// Retrieve child visual at specified index value.
Visual childVisual = (Visual)VisualTreeHelper.GetChild(myVisual, i);

Button _button = childVisual as Button;
if (_button != null)
{
Class_Button _newButtonClass = new Class_Button();
if (_button.Name != null)
{
_newButtonClass.ButtonName = _button.Name;
}
ButtonsList.Add(_newButtonClass);
}

// Enumerate children of the child visual object.
EnumVisual(childVisual);

}
}

关于wpf - 在 VisualTreeHelper 中看不到用户控件内的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9870560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com