C# 从代码访问自定义控件的子控件
我在Expression Blend中创建了一个自定义控件,它由放置在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(字符串名)工作?您应该能够使用它来访问控件模板的元素属性
网格中的多个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];