Click here to Skip to main content
Click here to Skip to main content

WPF Color Palette

, 10 Jul 2008 CPOL
Rate this:
Please Sign up or sign in to vote.
Show WPF brushes in a ListBox.

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:

<!-- 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:

// 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:

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)

Share

About the Author

Sam Farajpour
Software Developer Home
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
No Biography provided

Comments and Discussions

 
GeneralMy vote of 5 PinmemberBastaNL19-Oct-11 5:16 
GeneralMy vote of 4 PinmemberSalam633111-Oct-11 19:08 
QuestionGood Stuff.. PinmemberSalam633111-Oct-11 19:08 
GeneralThank you! Pinmemberthe.komplikator@gmail.com20-Nov-09 9:36 
AnswerRe: Thank you! PinmemberSam Farajpour20-Nov-09 10:43 

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

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

| Advertise | Privacy | Mobile
Web04 | 2.8.141022.1 | Last Updated 10 Jul 2008
Article Copyright 2008 by Sam Farajpour
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid