Click here to Skip to main content
15,867,453 members
Articles / Desktop Programming / WPF

WPF Color Palette

Rate me:
Please Sign up or sign in to vote.
4.67/5 (13 votes)
10 Jul 2008CPOL 72.7K   2.6K   23   5
Show WPF brushes in a ListBox.

Image 1

Introduction

This simple application lists brushes in System.Windows.Media.Brushes in a ListBox by using Reflection and the WPF Data Binding features.

Using the code

First, add a ListBox and set a DataTemplate in the ItemTemplate attribute:

XML
<!-- Don't forget to set ItemsSource as {Binding} -->
<ListBox Name="lsbBrushes" ItemsSource="{Binding}" Margin="10"
    ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <!-- Context Menu -->
    <ListBox.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Copy Name" Click="CopyName_Click"></MenuItem>
            <MenuItem Header="Copy Hex" Click="CopyHex_Click"></MenuItem>
        </ContextMenu>
    </ListBox.ContextMenu>
    <!-- Item Panel Template just for show items in warp mode -->
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <!-- Items Data Template -->
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition Width="130"/>
                </Grid.ColumnDefinitions>
                <Rectangle Fill="{Binding Path=Name}" 
                    Stroke="Black" Margin="5"
                    StrokeThickness="1" Height="50" Width="100"/>
                <StackPanel Grid.Column="1">
                    <Label Content="{Binding Path=Name}" />
                    <Label Content="{Binding Path=Hex}" />
                </StackPanel>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

And now, write the binding class and item class like this:

C#
// Binding Class
class WPFBrushList : List<WPFBrush>
{
    public WPFBrushList()
    {
        // Get type of the Brushes
        Type BrushesType = typeof(Brushes);
        // Get properties of this type
        PropertyInfo[] brushesProperty = BrushesType.GetProperties();
        // Extract Name and Hex code and add to list (binding class)
        foreach (PropertyInfo property in brushesProperty)
        {
            BrushConverter brushConverter = new BrushConverter();
            Brush brush = (Brush)brushConverter.ConvertFromString(property.Name);
            Add(new WPFBrush(property.Name, brush.ToString()));
        }
    }
}

// Item Class
class WPFBrush
{
    public WPFBrush(string name, string hex) 
    {
        Name = name;
        Hex = hex;
    }
    //please note name of properties are same as DataTemplate Binding Paths 
    public string Name { get; set; }
    public string Hex { get; set; }
}

At last, set the binding class to ListBox.DataContext:

C#
public partial class Window1 : Window
{
    // Create binding object
    private WPFBrushList _brushes = new WPFBrushList();
    public Window1()
    {
        InitializeComponent();
        // Bind to ListBox
        lsbBrushes.DataContext = _brushes;
    }
    // Copy selected to Clipboard
    private void CopyName_Click(object sender, RoutedEventArgs e)
    {
        if (lsbBrushes.SelectedIndex != -1)
            Clipboard.SetText(((WPFBrush)lsbBrushes.SelectedItem).Name);
    }
    private void CopyHex_Click(object sender, RoutedEventArgs e)
    {
        if (lsbBrushes.SelectedIndex != -1)
            Clipboard.SetText(((WPFBrush)lsbBrushes.SelectedItem).Hex);
    }
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer Home
Iran (Islamic Republic of) Iran (Islamic Republic of)
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 5 Pin
BastaNL19-Oct-11 5:16
BastaNL19-Oct-11 5:16 
GeneralMy vote of 4 Pin
Salam633111-Oct-11 19:08
professionalSalam633111-Oct-11 19:08 
Good stuff,,
QuestionGood Stuff.. Pin
Salam633111-Oct-11 19:08
professionalSalam633111-Oct-11 19:08 
GeneralThank you! Pin
the.komplikator20-Nov-09 9:36
the.komplikator20-Nov-09 9:36 
AnswerRe: Thank you! Pin
Sam Farajpour Ghamari20-Nov-09 10:43
professionalSam Farajpour Ghamari20-Nov-09 10:43 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.