我在wpf 4.0中包含用户控件,其中包含按钮,标签,文本框等...... 我想循环这些控件,当我得到一个buuton时,我想把它的名字并将其保存到我的列表中。基本上,我想要做的就是在UserControl中创建我所有按钮的Names_list。无法看到VisualTreeHelper中的用户控件内的控件
我有遍历所有控件的方法,如果它发现一个按钮,这样可以节省它的名字 -
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,尽管每个控件都有ax:Name和每个控件都是x :FieldModifier = “公共”。这是非常奇怪的....我不明白的原因,以及如何解决这个问题... 任何人都可以告诉我做错了什么? 感谢
你打电话给EnumVisual()的时候?你确定这个模板已经被应用了吗? – GazTheDestroyer 2012-03-26 10:38:18
@GazTheDestroyer我创建了我的MainWindow,其中包含UserControl,并且在显示它之后,我调用通过单击menuItem来获取按钮列表的函数.....并且通过该点,我可以在MainWindow中看到UserControl ... – 2012-03-26 10:42:54
这并不意味着UserControl已经被加载。在代码输入该方法的过程中,它可能处于进程的中间。尝试调用该方法,例如,在一些临时按钮单击事件处理程序 – EvAlex 2012-03-26 11:00:37