Silverlight XAML 命名空间范围
Posted
技术标签:
【中文标题】Silverlight XAML 命名空间范围【英文标题】:Silverlight XAML namespace scoping 【发布时间】:2012-02-10 05:05:42 【问题描述】:我需要在 silverlight 页面上动态生成一些组合框。
如果我有以下 xaml:
<ComboBox Name="Combo1">
<ComboBox.Items>
<ComboBoxItem Name="Option1" Content="Option 1" />
<ComboBoxItem Name="Option2" Content="Option 2" />
</ComboBox.Items>
</ComboBox>
<ComboBox Name="Combo2">
<ComboBox.Items>
<ComboBoxItem Name="Option1" Content="Option 1" />
<ComboBoxItem Name="Option2" Content="Option 2" />
</ComboBox.Items>
</ComboBox>
我收到错误消息,提示第二个 Option1 名称(在 Combo2 下)已存在于命名空间中。
我读过here 说这是silverlight 中的一个错误,但我不太明白如何解决它。我需要能够从选定的 ComboBox 项中检索字符串 Option1。
有什么想法吗?
编辑:我有一个自定义控件,可以生成一些组合框。一些示例 XAML 代码如下所示:
<ComboBox Name="Combo1">
<ComboBox.Items>
<ComboBoxItem Name="True" Content="Yes" />
<ComboBoxItem Name="False" Content="No" />
</ComboBox.Items>
</ComboBox>
<ComboBox Name="Combo2">
<ComboBox.Items>
<ComboBoxItem Name="True" Content="Okay" />
<ComboBoxItem Name="False" Content="Not Okay" />
</ComboBox.Items>
</ComboBox>
我希望能够检索选定的 ComboBoxItem“名称”,而不是“内容”。但是,这样做,如果任何组合框“名称”不是唯一的(在此控件中),我将遇到错误.
【问题讨论】:
【参考方案1】:您不能在 XAML/Class 文件中使用相同的名称两次。如果要动态生成自定义组合框,则创建模板并使用该模板动态生成自定义组合框或创建实现组合框的自定义控件。
在xaml中做<ComboBoxItem/>
之类的事情时,实际上是在调用ComboBoxItem的构造函数来创建一个ComboBoxItem对象。通过给它一个名字,你可以用它来引用后台代码中的对象。所以想象一下,如果你在同一个类的后面代码中有两个同名的对象......编译器不允许你这样做。
您引用的链接是一个错误,因为如果对象位于不同的类中,您应该能够具有相同的名称,因此不应该有任何命名冲突。但是在您的情况下,您似乎正在尝试在同一个类中创建两个具有相同名称的对象。
【讨论】:
谢谢。我只是认为以上是关于Silverlight XAML 命名空间范围的主要内容,如果未能解决你的问题,请参考以下文章
名称 GridView 不存在于命名空间 http://schema.microsoft.com/client/2007