C# 从代码访问自定义控件的子控件

C# 从代码访问自定义控件的子控件,c#,visual-studio,silverlight,windows-phone-7,expression-blend,C#,Visual Studio,Silverlight,Windows Phone 7,Expression Blend,我在Expression Blend中创建了一个自定义控件,它由放置在网格中的多个TextBlock组成。现在,我在VisualStudio中将这个自定义控件添加到我的手机页面,并希望从C#code中访问和更改这些文本块的文本 如何在代码中访问这些子控件 我想我可以这样做: MyCustomControl.TextBlock1.Text = "New Text"; 但这并不是那么容易。那么我该怎么做呢?做GetTemplateChild(字符串名)工作?您应该能够使用它来访问控件模板的元素属性

我在Expression Blend中创建了一个自定义控件,它由放置在
网格中的多个
TextBlock
组成。现在,我在VisualStudio中将这个自定义控件添加到我的手机页面,并希望从C#code中访问和更改这些文本块的文本

如何在代码中访问这些子控件

我想我可以这样做:

MyCustomControl.TextBlock1.Text = "New Text";

但这并不是那么容易。那么我该怎么做呢?

GetTemplateChild(字符串名)工作?您应该能够使用它来访问控件模板的元素属性
MyCustomControl.TextBlock1
存在,但它是
内部的
,而不是
公共的
。您可以使用
MyCustomControl.FindName(“TextBlock1”)作为TextBlock
按名称查找资源。

请尝试以下代码,这两种代码都可以满足您的要求:

Control subControl1 = (Control)MyCustomControl.Controls[0];

使用任何代码都可以访问文本属性。 始终记住自定义控件中的层次结构,然后尝试逐级访问所有控件


如果您仍然面临任何问题,请随时询问。

不幸的是,它返回空值。但即使它起作用,我也会在运行时创建多个自定义控件。在这种情况下,使用这个名字对我没有帮助。我需要针对一个特定控件。如果它返回null:可能是这样的情况:要么您拼写错误了孩子的名字,要么可能是正确地转换了类型?我再次尝试了,一次是使用Rick的
FindName
调用,一次是使用
GetTemplateChild
,两者都使用相同的名称。FindName成功,GetTemplateChild返回null(我省略了强制转换,并查看了它是否返回了一个对象-它没有)。这正是我要搜索的。很有效,谢谢!
TextBox subControl1 = (TextBox)MyCustomControl.Controls[0];