{"id":13214,"date":"2022-03-23T11:51:25","date_gmt":"2022-03-23T10:51:25","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=13214"},"modified":"2023-01-19T11:13:24","modified_gmt":"2023-01-19T10:13:24","slug":"wpf-combobox-enum-i-language","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/wpf-combobox-enum-i-language\/","title":{"rendered":"WPF, ComboBox, enum i language"},"content":{"rendered":"\n<p>Rozpoczynaj\u0105c prac\u0119 z aplikacjami WPF, jeden z problem\u00f3w stanowi\u0142o za\u0142adowanie do kontrolek combobox danych typu enum. Szczeg\u00f3lnie, jak zrobi\u0107 to w j\u0119zyku odpowiednim dla u\u017cytkownika. W poni\u017cszym artykule przedstawiam spos\u00f3b, aby osi\u0105gn\u0105\u0107 ten cel.<\/p>\n\n\n\n<p>Wszystkie przyk\u0142ady s\u0105 zawarte w solucji Sii.Wpf.Examples, kt\u00f3ra jest do\u0142\u0105czona do artyku\u0142u*. Poni\u017csze przyk\u0142ady b\u0119d\u0105 u\u017cywa\u0142y enuma DeviceConfigurationType.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/01\/Rysunek-1.-Definicja-enuma-DeviceConfigurationType..png\"><img decoding=\"async\" width=\"485\" height=\"257\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/01\/Rysunek-1.-Definicja-enuma-DeviceConfigurationType..png\" alt=\"Definicja enuma DeviceConfigurationType\" class=\"wp-image-18468\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/01\/Rysunek-1.-Definicja-enuma-DeviceConfigurationType..png 485w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/01\/Rysunek-1.-Definicja-enuma-DeviceConfigurationType.-300x159.png 300w\" sizes=\"(max-width: 485px) 100vw, 485px\" \/><\/a><figcaption>Ryc. 1 Definicja enuma DeviceConfigurationType<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">ViewModel i ObservableCollection<\/h2>\n\n\n\n<p>W najprostszym przypadku w viewmodelu mo\u017cna zdefiniowa\u0107 kolekcj\u0119, kt\u00f3r\u0105 b\u0119dziemy podpina\u0107 do kontrolki combobox. Na poni\u017cszej grafice mamy w\u0142a\u015bciwo\u015b\u0107 Configurations typu ObservableCollection&lt;DeviceConfigurationType>, do kt\u00f3rej dodajemy poszczeg\u00f3lne warto\u015bci enuma.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-2.-Definicja-wlasciwosci-Configurations.-1024x349-1.png\"><img decoding=\"async\" width=\"1024\" height=\"349\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-2.-Definicja-wlasciwosci-Configurations.-1024x349-1.png\" alt=\"Definicja w\u0142a\u015bciwo\u015bci Configurations (fragment klasy MainWindowViewModel)\" class=\"wp-image-18471\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-2.-Definicja-wlasciwosci-Configurations.-1024x349-1.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-2.-Definicja-wlasciwosci-Configurations.-1024x349-1-300x102.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-2.-Definicja-wlasciwosci-Configurations.-1024x349-1-768x262.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 2 Definicja w\u0142a\u015bciwo\u015bci Configurations (fragment klasy MainWindowViewModel)<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-3.-Binding-wlasciwosci-Configurations-MainWindow.xaml_.-1024x551-1.png\"><img decoding=\"async\" width=\"1024\" height=\"551\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-3.-Binding-wlasciwosci-Configurations-MainWindow.xaml_.-1024x551-1.png\" alt=\"Binding w\u0142a\u015bciwo\u015bci Configurations (MainWindow.xaml)\" class=\"wp-image-18473\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-3.-Binding-wlasciwosci-Configurations-MainWindow.xaml_.-1024x551-1.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-3.-Binding-wlasciwosci-Configurations-MainWindow.xaml_.-1024x551-1-300x161.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-3.-Binding-wlasciwosci-Configurations-MainWindow.xaml_.-1024x551-1-768x413.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 3 Binding w\u0142a\u015bciwo\u015bci Configurations (MainWindow.xaml)<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-4.-Okno-aplikacji-ComboBox001.-1.png\"><img decoding=\"async\" width=\"488\" height=\"250\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-4.-Okno-aplikacji-ComboBox001.-1.png\" alt=\"Okno aplikacji ComboBox001\" class=\"wp-image-18475\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-4.-Okno-aplikacji-ComboBox001.-1.png 488w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-4.-Okno-aplikacji-ComboBox001.-1-300x154.png 300w\" sizes=\"(max-width: 488px) 100vw, 488px\" \/><\/a><figcaption>Ryc. 4 Okno aplikacji ComboBox001<\/figcaption><\/figure><\/div>\n\n\n\n<p>Powy\u017cszy przyk\u0142ad jest zawarty w projekcie Sii.Wpf.Examples.ComboBox001.*<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Style<\/h2>\n\n\n\n<p>Bardziej eleganckim podej\u015bciem jest zdefiniowanie stylu do comboboxa, w kt\u00f3rym \u0142adujemy warto\u015bci enuma.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-5.Definicja-stylu-Sii.Wpf_.Examples.ComboBox.DeviceConfigurationTypes.-1024x216-1.png\"><img decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-5.Definicja-stylu-Sii.Wpf_.Examples.ComboBox.DeviceConfigurationTypes.-1024x216-1.png\" alt=\"Definicja stylu Sii.Wpf.Examples.ComboBox.DeviceConfigurationTypes\" class=\"wp-image-18477\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-5.Definicja-stylu-Sii.Wpf_.Examples.ComboBox.DeviceConfigurationTypes.-1024x216-1.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-5.Definicja-stylu-Sii.Wpf_.Examples.ComboBox.DeviceConfigurationTypes.-1024x216-1-300x63.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-5.Definicja-stylu-Sii.Wpf_.Examples.ComboBox.DeviceConfigurationTypes.-1024x216-1-768x162.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 5 Definicja stylu Sii.Wpf.Examples.ComboBox.DeviceConfigurationTypes<\/figcaption><\/figure><\/div>\n\n\n\n<p>Pojawi\u0142a si\u0119 tutaj klasa EnumBinding, kt\u00f3ra dostarcza warto\u015bci dla w\u0142a\u015bciwo\u015bci ItemSource.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-6.-Definicja-klasy-EnumBinding.-1.png\"><img decoding=\"async\" width=\"1013\" height=\"612\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-6.-Definicja-klasy-EnumBinding.-1.png\" alt=\"Definicja klasy EnumBinding\" class=\"wp-image-18479\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-6.-Definicja-klasy-EnumBinding.-1.png 1013w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-6.-Definicja-klasy-EnumBinding.-1-300x181.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-6.-Definicja-klasy-EnumBinding.-1-768x464.png 768w\" sizes=\"(max-width: 1013px) 100vw, 1013px\" \/><\/a><figcaption>Ryc. 6 Definicja klasy EnumBinding<\/figcaption><\/figure><\/div>\n\n\n\n<p>Nast\u0119pnie, w widoku MainWindow.xaml okre\u015blamy styl dla comboboxa.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-7.-Przyklad-uzycia-stylu-Sii.Wpf_.Examples.ComboBox.DeviceConfigurationTypes-MainWindow.xaml_.-1024x78-1.png\"><img decoding=\"async\" width=\"1024\" height=\"78\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-7.-Przyklad-uzycia-stylu-Sii.Wpf_.Examples.ComboBox.DeviceConfigurationTypes-MainWindow.xaml_.-1024x78-1.png\" alt=\"Przyk\u0142ad u\u017cycia stylu Sii.Wpf.Examples.ComboBox.DeviceConfigurationTypes (MainWindow.xaml)\" class=\"wp-image-18481\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-7.-Przyklad-uzycia-stylu-Sii.Wpf_.Examples.ComboBox.DeviceConfigurationTypes-MainWindow.xaml_.-1024x78-1.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-7.-Przyklad-uzycia-stylu-Sii.Wpf_.Examples.ComboBox.DeviceConfigurationTypes-MainWindow.xaml_.-1024x78-1-300x23.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-7.-Przyklad-uzycia-stylu-Sii.Wpf_.Examples.ComboBox.DeviceConfigurationTypes-MainWindow.xaml_.-1024x78-1-768x59.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 7 Przyk\u0142ad u\u017cycia stylu Sii.Wpf.Examples.ComboBox.DeviceConfigurationTypes (MainWindow.xaml)<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-8.-Okno-aplikacji-ComboBox002.-1.png\"><img decoding=\"async\" width=\"488\" height=\"251\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-8.-Okno-aplikacji-ComboBox002.-1.png\" alt=\"Okno aplikacji ComboBox002\" class=\"wp-image-18483\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-8.-Okno-aplikacji-ComboBox002.-1.png 488w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-8.-Okno-aplikacji-ComboBox002.-1-300x154.png 300w\" sizes=\"(max-width: 488px) 100vw, 488px\" \/><\/a><figcaption>Ryc. 8 Okno aplikacji ComboBox002<\/figcaption><\/figure><\/div>\n\n\n\n<p>Powy\u017cszy przyk\u0142ad jest zawarty w projekcie Sii.Wpf.Examples.ComboBox002.*<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">TypeConverter i DescriptionAttribute<\/h2>\n\n\n\n<p>Jak wida\u0107 na powy\u017cszym zrzucie dzia\u0142aj\u0105cej aplikacji, w comboboxie mamy kolejne warto\u015bci emuna. Lepszym rozwi\u0105zaniem b\u0119d\u0105 bardziej opisowe warto\u015bci (jak poni\u017cej).<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-9.-Okno-aplikacji-ComboBox003.-1.png\"><img decoding=\"async\" width=\"493\" height=\"248\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-9.-Okno-aplikacji-ComboBox003.-1.png\" alt=\"Okno aplikacji ComboBox003\" class=\"wp-image-18485\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-9.-Okno-aplikacji-ComboBox003.-1.png 493w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-9.-Okno-aplikacji-ComboBox003.-1-300x151.png 300w\" sizes=\"(max-width: 493px) 100vw, 493px\" \/><\/a><figcaption>Ryc. 9 Okno aplikacji ComboBox003<\/figcaption><\/figure><\/div>\n\n\n\n<p>Jak to osi\u0105gn\u0105\u0107? Tutaj z pomoc\u0105 przychodz\u0105 nam wspomniane TypeConverter i DescriptionAttribute. Za ich pomoc\u0105 trzeba troch\u0119 zmodyfikowa\u0107 enuma DeviceConfigurationType jak poni\u017cej.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-10.-Definicja-enuma-DeviceConfigurationType-atrybutami-Description-i-konwerterem-EnumDescritpionTypeConverter.-1.png\"><img decoding=\"async\" width=\"637\" height=\"340\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-10.-Definicja-enuma-DeviceConfigurationType-atrybutami-Description-i-konwerterem-EnumDescritpionTypeConverter.-1.png\" alt=\"Definicja enuma DeviceConfigurationType atrybutami Description i konwerterem EnumDescritpionTypeConverter\" class=\"wp-image-18487\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-10.-Definicja-enuma-DeviceConfigurationType-atrybutami-Description-i-konwerterem-EnumDescritpionTypeConverter.-1.png 637w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-10.-Definicja-enuma-DeviceConfigurationType-atrybutami-Description-i-konwerterem-EnumDescritpionTypeConverter.-1-300x160.png 300w\" sizes=\"(max-width: 637px) 100vw, 637px\" \/><\/a><figcaption>Ryc. 10 Definicja enuma DeviceConfigurationType atrybutami Description i konwerterem EnumDescritpionTypeConverter<\/figcaption><\/figure><\/div>\n\n\n\n<p>Klas\u0105 DescriptionAttribute nie b\u0119dziemy si\u0119 zajmowa\u0107 (jest zdefiniowana w namespace System.ComponentModel). Ciekawsza jest klasa EnumDescritpionTypeConverter, kt\u00f3rej \u017ar\u00f3d\u0142a s\u0105 przedstawione poni\u017cej.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-11.-Definicja-klasy-EnumDescritpionTypeConverter.-1024x494-1.png\"><img decoding=\"async\" width=\"1024\" height=\"494\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-11.-Definicja-klasy-EnumDescritpionTypeConverter.-1024x494-1.png\" alt=\"Definicja klasy EnumDescritpionTypeConverter\" class=\"wp-image-18489\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-11.-Definicja-klasy-EnumDescritpionTypeConverter.-1024x494-1.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-11.-Definicja-klasy-EnumDescritpionTypeConverter.-1024x494-1-300x145.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-11.-Definicja-klasy-EnumDescritpionTypeConverter.-1024x494-1-768x371.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 11 Definicja klasy EnumDescritpionTypeConverter<\/figcaption><\/figure><\/div>\n\n\n\n<p>Powy\u017cszy przyk\u0142ad jest zawarty w projekcie Sii.Wpf.Examples.ComboBox003.*<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Multilanguage<\/h2>\n\n\n\n<p>Niestety, stosuj\u0105c atrybut DescriptionAttribute, jeste\u015bmy w tym wypadku skazani tylko na j\u0119zyk polski, a aplikacje WPF mog\u0105 by\u0107 wieloj\u0119zyczne. Jak to osi\u0105gn\u0105\u0107? Dodajemy do projektu pliki typu resources (.resx) dla ka\u017cdego j\u0119zyka. Tutaj Language.resx (angielski) i Language.pl-PL.resx<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-12.-Pliki-Language.resx-angielski-i-Language.pl-PL.resx_.-1.png\"><img decoding=\"async\" width=\"368\" height=\"361\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-12.-Pliki-Language.resx-angielski-i-Language.pl-PL.resx_.-1.png\" alt=\"Pliki Language.resx (angielski) i Language.pl-PL.resx\" class=\"wp-image-18491\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-12.-Pliki-Language.resx-angielski-i-Language.pl-PL.resx_.-1.png 368w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-12.-Pliki-Language.resx-angielski-i-Language.pl-PL.resx_.-1-300x294.png 300w\" sizes=\"(max-width: 368px) 100vw, 368px\" \/><\/a><figcaption>Ryc. 12 Pliki Language.resx (angielski) i Language.pl-PL.resx<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-13.-Plik-Language.resx_.-1.png\"><img decoding=\"async\" width=\"793\" height=\"272\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-13.-Plik-Language.resx_.-1.png\" alt=\"Plik Language.resx\" class=\"wp-image-18493\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-13.-Plik-Language.resx_.-1.png 793w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-13.-Plik-Language.resx_.-1-300x103.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-13.-Plik-Language.resx_.-1-768x263.png 768w\" sizes=\"(max-width: 793px) 100vw, 793px\" \/><\/a><figcaption>Ryc. 13 Plik Language.resx<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-14.-1.png\"><img decoding=\"async\" width=\"854\" height=\"271\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-14.-1.png\" alt=\"Plik Language.pl-PL.resx\" class=\"wp-image-18495\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-14.-1.png 854w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-14.-1-300x95.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-14.-1-768x244.png 768w\" sizes=\"(max-width: 854px) 100vw, 854px\" \/><\/a><figcaption>Ryc. 14 Plik Language.pl-PL.resx<\/figcaption><\/figure><\/div>\n\n\n\n<p>Nast\u0119pnie trzeba zn\u00f3w zmieni\u0107 definicj\u0119 enuma DeviceConfigurationType .<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-15.-Definicja-enuma-DeviceConfigurationType-z-atrybutami-LocalizedDescription.-1024x306-1.png\"><img decoding=\"async\" width=\"1024\" height=\"306\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-15.-Definicja-enuma-DeviceConfigurationType-z-atrybutami-LocalizedDescription.-1024x306-1.png\" alt=\"\" class=\"wp-image-18497\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-15.-Definicja-enuma-DeviceConfigurationType-z-atrybutami-LocalizedDescription.-1024x306-1.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-15.-Definicja-enuma-DeviceConfigurationType-z-atrybutami-LocalizedDescription.-1024x306-1-300x90.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-15.-Definicja-enuma-DeviceConfigurationType-z-atrybutami-LocalizedDescription.-1024x306-1-768x230.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 15 Definicja enuma DeviceConfigurationType z atrybutami LocalizedDescription<\/figcaption><\/figure><\/div>\n\n\n\n<p>Jak widzimy, zamiast DescriptionAttribute u\u017cywamy LocalizedDescriptionAttribute (kt\u00f3ra dziedziczy po DescriptionAttribute).<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-16.-Definicja-klasy-LocalizedDescriptionAttribute.-1.png\"><img decoding=\"async\" width=\"937\" height=\"581\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-16.-Definicja-klasy-LocalizedDescriptionAttribute.-1.png\" alt=\"Definicja klasy LocalizedDescriptionAttribute\" class=\"wp-image-18499\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-16.-Definicja-klasy-LocalizedDescriptionAttribute.-1.png 937w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-16.-Definicja-klasy-LocalizedDescriptionAttribute.-1-300x186.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-16.-Definicja-klasy-LocalizedDescriptionAttribute.-1-768x476.png 768w\" sizes=\"(max-width: 937px) 100vw, 937px\" \/><\/a><figcaption>Ryc. 16 Definicja klasy LocalizedDescriptionAttribute<\/figcaption><\/figure><\/div>\n\n\n\n<p>Poni\u017cej przedstawiono aplikacj\u0119 w j\u0119zyku angielskim<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-17.-Okno-aplikacji-ComboBox004-po-angielsku.-1.png\"><img decoding=\"async\" width=\"487\" height=\"247\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-17.-Okno-aplikacji-ComboBox004-po-angielsku.-1.png\" alt=\"\" class=\"wp-image-18501\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-17.-Okno-aplikacji-ComboBox004-po-angielsku.-1.png 487w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Rysunek-17.-Okno-aplikacji-ComboBox004-po-angielsku.-1-300x152.png 300w\" sizes=\"(max-width: 487px) 100vw, 487px\" \/><\/a><figcaption>Ryc. 17 Okno aplikacji ComboBox004 (po angielsku)<\/figcaption><\/figure><\/div>\n\n\n\n<p>Powy\u017cszy przyk\u0142ad jest zawarty w projekcie Sii.Wpf.Examples.ComboBox004.*<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<p>My\u015bl\u0119, \u017ce powy\u017csze przyk\u0142ady pomog\u0105 pocz\u0105tkuj\u0105cym developerom w rozwi\u0105zaniu kilku problem\u00f3w w WPF i wska\u017c\u0105, jak mo\u017cna rozwi\u0105zywa\u0107 inne zagadnienia.<\/p>\n\n\n\n<p>Wszystkie przyk\u0142ady zawarte s\u0105 w solucji Sii.Wpf.Examples (Visual studio 2022, Net. 5.0).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Materia\u0142y zapowiedziane w artykule<\/h3>\n\n\n\n<p><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Sii.Wpf_.Examples-2.zip\">Sii.Wpf.Examples.ComboBox<\/a><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;13214&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;14&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 14)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;WPF, ComboBox, enum i language&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 14)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Rozpoczynaj\u0105c prac\u0119 z aplikacjami WPF, jeden z problem\u00f3w stanowi\u0142o za\u0142adowanie do kontrolek combobox danych typu enum. Szczeg\u00f3lnie, jak zrobi\u0107 to &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/wpf-combobox-enum-i-language\/\">Continued<\/a><\/p>\n","protected":false},"author":343,"featured_media":13238,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[287,1213,1212],"class_list":["post-13214","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-software-development","tag-enum","tag-wpf"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/03\/Enuma.png","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/13214"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/343"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=13214"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/13214\/revisions"}],"predecessor-version":[{"id":18503,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/13214\/revisions\/18503"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/13238"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=13214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=13214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=13214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}