2012-02-10 83 views
0

我需要在silverlight页面上动态生成一些组合框。Silverlight XAML namespace scoping

如果我有下面的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> 

我得到的错误说,第二个选项1名(Combo2下)已经存在的命名空间。

我读过here这是silverlight中的一个bug,但我不太明白如何解决它。我需要能够从选定的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“名称”,而不是“内容”不过,做这样的,我会碰上如果错误任何comboboxitem“名称”都不是唯一的(在此控件中)。

回答

1

您不能在XAML/Class文件中使用相同的名称两次。如果您想动态生成自定义组合框,请创建一个模板并使用它来动态生成自定义组合框或创建实现组合框的自定义控件。

当在xaml中执行诸如<ComboBoxItem/>之类的操作时,它实际上调用ComboBoxItem的构造函数来创建ComboBoxItem对象。通过给它一个名字,你可以用它来引用后面代码中的对象。所以想象一下,如果你在同一个类中的后面代码中有两个同名的对象......编译器不会让你这样做。

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

+0

谢谢。我只是认为会被封装在元素中,并且不会有命名空间问题。 – krebstar 2012-02-10 08:38:58

+0

我想,我想说的是,我试图做一个自定义控件,生成自己的组合框。每个组合框的组合框元素可以命名为任何东西,因此这些组合框元素可以在不同的组合框中具有相同的名称。我仍然需要能够引用选定的组合框名并获取它们的名称。 – krebstar 2012-02-10 08:41:29

+0

hmm。你可以做的是在自定义控件的后台代码中动态生成组合框,并将其添加到一个堆栈面板的子项中,例如,在您的自定义控件中。对于您创建并添加到堆栈面板的每个组合框控件,可以将事件处理程序绑定到其“SelectChanged”事件,以便每当您的组合框选定值发生更改时,它都会调用一个事件处理程序方法来传递回参数告诉你事情像哪个组合框调用事件和新的选定值等 – 2012-02-10 08:51:52