2012-02-10 88 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