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中做&lt;ComboBoxItem/&gt;之类的事情时,实际上是在调用ComboBoxItem的构造函数来创建一个ComboBoxItem对象。通过给它一个名字,你可以用它来引用后台代码中的对象。所以想象一下,如果你在同一个类的后面代码中有两个同名的对象......编译器不允许你这样做。

您引用的链接是一个错误,因为如果对象位于不同的类中,您应该能够具有相同的名称,因此不应该有任何命名冲突。但是在您的情况下,您似乎正在尝试在同一个类中创建两个具有相同名称的对象。

【讨论】:

谢谢。我只是认为 将被封装在 元素内,不会有命名空间问题。 我想,我想说的是,我正在尝试制作一个自定义控件来生成自己的组合框。每个组合框的组合框项可以命名为任何名称,因此这些组合框项可以在不同的组合框之间具有相同的名称。我仍然需要能够引用选定的组合框项并获取它们的名称。 嗯。您可以做的是在自定义控件的后台代码中动态生成组合框,并将其添加到堆栈面板的子项中,例如,在自定义控件中。对于您创建并添加到堆栈面板的每个组合框控件,您可以将事件处理程序绑定到它的“SelectChanged”事件,以便每当您的组合框选择的任何值发生更改时,它都会调用一个事件处理程序方法来传回参数告诉您诸如哪个组合框调用了事件以及新的选定值等内容 谢谢.. 嗯,这就是我正在做的事情,生成一个 xaml 字符串以传递给 XamlReader 以生成元素,然后将其添加到我的 LayoutRoot。我遇到的困难是我无法为组合框设置“名称”,因为它可能与其他组合框的组合框冲突。我会更新我的帖子以说明我的意思。 听起来你只是想看看用户选择了什么(是/否)。当 selectedchanged 事件的事件处理程序被调用时,您只需检查传递给事件处理程序的 selectedChangeArgs 的新值。如果内容是“好的”,那么做一些事情,如果它是“不好”,做别的事情。我不明白您为什么需要为这些项目命名。

以上是关于Silverlight XAML 命名空间范围的主要内容,如果未能解决你的问题,请参考以下文章

Silverlight 工具包命名空间“有时”未知

名称 GridView 不存在于命名空间 http://schema.microsoft.com/client/2007

转换器类的 XAML 命名空间错误

Powershell 中的自定义 XAML 命名空间

XAML 中的命名空间错误中不存在该名称

一个wpf命名空间问题