如何在代码中访问xaml对象以进行自定义usercontrol?

时间:2010-11-24 17:42:34

标签: silverlight silverlight-4.0

假设我有几个用户控件,如:

uc1,uc2

uc2在xaml中包含uc1

<my:uc1 x:Name = "myuc1" />

然后在一个新的usercontrol代码后面,我想创建uc2的实例并访问uc1,如:

uc2 mycontrol = new uc2();
uc2.myuc1.DataContext = myViewModel;
....

我收到错误,因为myuc1在后面的代码中无法访问,但我可以在后面的uc2代码中访问myuc1!不知道为什么。

错误消息说: uc2不包含'myuc1'的定义

如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

你不应该访问变量的myuc1而不是类型吗?

例如:

uc2 mycontrol = new uc2();
mycontrol.myuc1.DataContext = myViewModel;

答案 1 :(得分:0)

这是因为uc2包含uc1。因此,myuc1可以在uc2中进行访问,因为它将被编译为私有字段。如果你真的想让这个实例公开 - 在uc2中创建属性。 E.g。

  
    

public uc1 MyUC1 {get {return myuc1}}

  

答案 2 :(得分:0)

我能想到你的代码无法工作的唯一原因是因为你的新用户控件与uc1和uc2控件位于不同的项目中。表示命名控件的字段具有内部可访问性,因此不可用于其他项目。

在我看来,不将这些字段设为私有不是一个好的选择,实际上动态创建字段并不好。历史VB6 / VBA的形式对我形成了。

我建议你为uc2添加适当的属性和方法来操作uc1而不是允许外部代码直接使用uc1。

如果由于某种原因您不能采取这种方法,请考虑在公共财产中放置对控件的包装访问权限。还要考虑创建一个uc1可以实现的接口,其中包含您想要访问的所有方法和属性,使该公共属性返回该接口而不是uc1类型。