Создать словарь в xaml?
Псевдо пример:
<Window>
<Window.Tag>
<x:Dictionary KeyType="{x:Type sys:String}" ValueType="{x:Type sys:Int32}">
<sys:DictionaryEntry Entry="{sys:DictionaryEntry Key0, 000}"/>
<sys:DictionaryEntry Key="key1" Value="111"/>
<sys:DictionaryEntry>
<sys:DictionaryEntry.Key>
<sys:String>Key2<sys:String>
</sys:DictionaryEntry.Key>
<sys:DictionaryEntry.Value>
<sys:Int32>222</sys:Int32>
</sys:DictionaryEntry.Value>
</sys:DictionaryEntry>
</x:Dictionary />
</Window.Tag>
</Window>
Ответы
Ответ 1
Вы не можете использовать класс Dictionary<TKey, TValue>
непосредственно в XAML, потому что нет способа указать общие аргументы типа (это возможно в следующей версии XAML, но оно не будет поддерживаться в VS2010 дизайнере WPF... по крайней мере, не в начальном выпуске).
Однако вы можете объявить не-общий класс, который наследует от Dictionary<TKey, TValue>
, и использовать его в XAML.
С#
public class MyDictionary : Dictionary<string, int> { }
XAML
<Window>
<Window.Tag>
<local:MyDictionary>
<sys:Int32 x:Key="key0">0</sys:Int32>
<sys:Int32 x:Key="key1">111</sys:Int32>
<sys:Int32 x:Key="key2">222</sys:Int32>
</local:MyDictionary />
</Window.Tag>
</Window>
Ответ 2
Если ключи и значения являются строками, вы можете использовать ListDictionary или HybridDictionary.
Например:
<Specialized:ListDictionary x:Key="MasterSlidesFileNames">
<System:String x:Key="long">Ya long yes ni</System:String>
<System:String x:Key="Sun">Waterfall</System:String>
<System:String x:Key="lorem ipsum">hello wOrld</System:String>
</Specialized:ListDictionary>
Ответ 3
В связанном вопросе я дал ответ , в котором показано, как можно создать общий словарь в XAML без функций XAML 2009, используя вместо этого Расширение разметки.
Ответ 4
Попробуйте что-то вроде этого:
используйте это пространство имен: xmlns:collections="clr-namespace:System.Collections;assembly=mscorlib"
<ComboBox.ItemsSource>
<collections:ArrayList>
<collections:DictionaryEntry Key="0" Value="Standby"/>
<collections:DictionaryEntry Key="1" Value="Maintenance"/>
<collections:DictionaryEntry Key="2" Value="Available"/>
<collections:DictionaryEntry Key="3" Value="Deselected"/>
<collections:DictionaryEntry Key="4" Value="Input Error"/>
</collections:ArrayList>
</ComboBox.ItemsSource>