How can I list colors in WPF with XAML ?, Wpfxaml
How can I get list of all colors I can pick in Visual Studio Designer (which isSystem.Windows.Media.Colors
, But that isn't a collection) and put them into my ownComboBox
Using WPF and XAML markup?
Link: http://stackoverflow.com/questions/562682/how-can-i-list-colors-in-wpf-with-xaml
Here is the pure XAML solution.
In your resources section, you wocould use this:
<!-- Make sure this namespace is declared so that it's in scope below -->.. xmlns:sys="clr-namespace:System;assembly=mscorlib" ..<ObjectDataProvider MethodName="GetType" ObjectType="{x:Type sys:Type}" x:Key="colorsTypeOdp"> <ObjectDataProvider.MethodParameters> <sys:String>System.Windows.Media.Colors, PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</sys:String> </ObjectDataProvider.MethodParameters></ObjectDataProvider><ObjectDataProvider ObjectInstance="{StaticResource colorsTypeOdp}" MethodName="GetProperties" x:Key="colorPropertiesOdp"></ObjectDataProvider>
Or, as CodeNaked points out, it can be switched to one tag:
<ObjectDataProvider ObjectInstance="{x:Type Colors}" MethodName="GetProperties" x:Key="colorPropertiesOdp" />
And then the combobox wowould look like this:
<ComboBox Name="comboBox1" ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}" DisplayMemberPath="Name" SelectedValuePath="Name" />
Here is a great ItemTemplate to use for a combobox using casperOne's code:
<ComboBox Name="cboColors" ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}" SelectedValuePath="Name"> <ComboBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" Height="18" Margin="0,0,0,2"> <Border BorderThickness="1" CornerRadius="2" BorderBrush="Black" Width="50" VerticalAlignment="Stretch" Background="{Binding Name}"/> <TextBlock Text="{Binding Name}" Margin="8,0,0,0"/> </StackPanel> </DataTemplate> </ComboBox.ItemTemplate></ComboBox>
Here is what I have done in a past ASP.net app:
// populate colors drop down (will work with other kinds of list controls)Type colors = typeof(System.Drawing.Color);PropertyInfo[] colorInfo = colors.GetProperties(BindingFlags.Public | BindingFlags.Static);foreach ( PropertyInfo info in colorInfo){ ddlColor.Items.Add(info.Name); }// Get the selected colorSystem.Drawing.Color selectedColor = System.Drawing.Color.FromName(ddlColor.SelectedValue);
Here's how to do it in code using reflection. The following will dump all predefined WPF color names to Output:
using System.Reflection;void ListAllColors(){ Type colorsType = typeof(System.Windows.Media.Colors); PropertyInfo[] colorsTypePropertyInfos = colorsType.GetProperties(BindingFlags.Public | BindingFlags.Static); foreach (PropertyInfo colorsTypePropertyInfo in colorsTypePropertyInfos) Debug.WriteLine(colorsTypePropertyInfo.Name);}
And to put them in a combobox, you cocould simply change the last line:
_comboBox.Items.Add(colorsTypePropertyInfo.Name);