Silverlight 在中动态添加用户控件,名称为“throws”;无效的范围异常";银光

Silverlight 在中动态添加用户控件,名称为“throws”;无效的范围异常";银光,silverlight,Silverlight,在我的Silverlight应用程序中,我有一个事件处理程序,它动态创建一个用户控件的新实例,并将其添加到另一个控件的Content属性中。在我将名称(x:name=“”)分配给用户控件之前(不是在事件中,而是在用户控件的XAML中)。然后,当我将模板设置为控件的.Content属性时,我得到一个“System.ArgumentException未由用户代码处理/值不在预期范围内”异常。我不知道错误在哪里,也不知道应该在哪里查找…它几乎嵌入在SL中。我无法确定需要设置哪些其他属性 下面是添加用户

在我的Silverlight应用程序中,我有一个事件处理程序,它动态创建一个用户控件的新实例,并将其添加到另一个控件的Content属性中。在我将名称(x:name=“”)分配给用户控件之前(不是在事件中,而是在用户控件的XAML中)。然后,当我将模板设置为控件的.Content属性时,我得到一个“System.ArgumentException未由用户代码处理/值不在预期范围内”异常。我不知道错误在哪里,也不知道应该在哪里查找…它几乎嵌入在SL中。我无法确定需要设置哪些其他属性

下面是添加用户控件的代码:

TilePane p = e.Element as TilePane; // this is the target
AppTileNormalViewControl template = new AppTileNormalViewControl(); // this is the user control
p.Content = template; // error happens here
这里的问题是,用户控件有一些公共属性,我将使用这些属性将数据绑定到用户控件中的一些控件。我需要一个名称来执行语法:

Text="{Binding ElementName=UserControlName, Path=PublicProperty}"

如果没有ElementName,绑定将不起作用。因此,如果我指定名称绑定将起作用,但我无法添加控件。Ideas?

问题是UserControl的name属性将成为内容控件所属范围内可用元素名集的一部分。只要您尝试添加其中两个这些元素以这种方式结束,您试图添加相同的名称,这将导致您看到的错误

UserControl的名称实际上是UserControl使用者的业务,而不是用户控件本身,因此您应该删除此
x:name
。另一种可行的方法是:-

Text="{Binding Parent.PublicProperty, ElementName=LayoutRoot}"

Usercontrol包含一个根元素,您可以将其所有UI和该元素(通常是
网格
,但实际上可以是任何
框架元素
)通常是名称
LayoutRoot
FrameworkElement
有一个
Parent
属性,对于
UserControl
的布局根,它将
UserControl
本身。

谢谢……这就解决了问题。您的代码段缺少Path属性。这就是为我做的(我的公共属性名为PaneTitle:Text=“{Binding ElementName=LayoutRoot,Path=Parent.PaneTitle}”@AC:我测试了
Path=
missing,效果很好,但它只是一点语法上的糖分,最好是显式的。