How can I list colors in WPF with XAML?


Question

How can I get list of all colors I can pick in Visual Studio Designer (which is System.Windows.Media.Colors, but that isn't a collection) and put them into my own ComboBox using WPF and XAML markup?

1
14
5/22/2011 8:23:50 PM

Accepted Answer

Here is the pure XAML solution.

In your resources section, you would 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 reduced to one tag:

<ObjectDataProvider 
    ObjectInstance="{x:Type Colors}" 
    MethodName="GetProperties" 
    x:Key="colorPropertiesOdp" />

And then the combobox would look like this:

<ComboBox Name="comboBox1" 
    ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}"
    DisplayMemberPath="Name"
    SelectedValuePath="Name" />
32
5/23/2017 11:48:43 AM

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>

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon