通过FindName()查找动态生成的Wcf控件

时间:2011-03-10 21:49:38

标签: wpf dynamic-controls findname

在父控件中查找控件的FramworkElement.FindName()方法似乎应该直截了当...

但我正在加强anty,似乎框架不喜欢我想做的事情。

首先,我意识到有很多不同的做事方式,请记住这是我在WPF中创建的第一种形式。

我根据集合中的项目数将控件加载到StackPanel中。此方法是必须的,因为集合由[用户输入的URL]中的目录数决定。

该列表将水平堆栈面板构建到垂直堆栈面板中,该面板在设计过程中放置​​在表单上。

所以dirStackPanel在表单上。 我将controlStackPanel插入dirStackPanel n次,并用识别名称命名每个:(string)(“controlStackPanel”+ n)。

我也在使用控件填充controlStackPanel,但考虑到我无法通过名称从父级(dirStackPanel)检索controlstackPanel,这是一个没有实际意义的点。

示例:

var getPanel = (StackPanel) this.dirStackPanel.FindName((string)("controlStackPanel" + n)) 返回Null

所以要清楚的是,我在AT RUN TIME插入的每个控件都被分配了一个名称,并且可以使用循环轻松检索。但FindName方法不适用于父“StackPanel”的第一个子控件。它不断返回null而不是对象。

任何想法?

1 个答案:

答案 0 :(得分:8)

如果要动态创建控件,则必须先调用RegisterName才能找到它们。

例如:

dirStackPanel.RegisterName(controlStackPanel.Name, controlStackPanel);