博客园  :: 新随笔  :: 管理

Color Selector Control(转)

Posted on 2011-01-12 09:59  slwf7man  阅读(440)  评论(0)    收藏  举报

How to Use the Color Selector Control

To use the Color Selector control you will need to add a reference to Liquid.dll in your project.

To use the Color Selector on your Silverlight page:

<UserControl x:Class="ColorSelector.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:liquid="clr-namespace:Liquid;assembly=Liquid"
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White">
        <liquid:ColorSelector x:Name="selectColor" SelectionChanged="selectColor_SelectionChanged" />
    </Grid>
</UserControl>

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Liquid;
namespace ColorSelector
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }
        private void selectColor_SelectionChanged(object sender, EventArgs e)
        {
            LayoutRoot.Background = new SolidColorBrush(selectColor.Selected);
        }
    }
}

 

In this example we create a single Color Selector named selectColor, with this created we attach an event handler to the SelectionChanged event, this is handled in the C# below.

In the above C# we set the background color when the SelectionChanged event of the Color Selector occurs.

Example Silverlight Color Selector Control:

 

 

Customizing the Color Selector With Styles

The Color Selector control can be skinned using the standard Silverlight 2 method of setting Styles in the App.xaml file of your Silverlight project.

Example of how to Apply a Skin to the Color Selector

These styles are placed in your XAML and referred to using the Style property:

    <Style TargetType="local:ColorSelector">
        <Setter Property="Width" Value="50" />
        <Setter Property="Height" Value="23" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:ColorSelector">
                    <local:DropDown x:Name="RootElement">
                        <local:DropDown.SelectedItemContent>
                            <local:ColorItem x:Name="ElementSelectedColor" IsHitTestVisible="False" />
                        </local:DropDown.SelectedItemContent>
                        <local:ItemViewer x:Name="ElementViewer" Width="168" VerticalAlignment="Top" VerticalScrollBarVisibility="Hidden" />
                    </local:DropDown>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
 


 

As you can see, styling is a powerful method of customizing the controls to suite the look and feel of your Silverlight application.

  

  

  

  

Silverlight Color Selector Reference

The Color Selector exposes several properties for controlling various aspects of the Color Selector and its behaviour.

Properties for Liquid.ColorSelector

Below are the available properties complete with descriptions.

Property NameTypeDescription
OpenPosition DropDownPosition            Gets or sets the opening position.

 

Methods for Liquid.ColorSelector

Below are the available methods, complete with parameters and descriptions.

Method NameDescriptionParameters
        Clear() Clears all colors from the selector.
ClearCustom() Clears all colors from the selector.
Add(Color) Adds a color to the selector.

Parameters

color
Color to add

 

Add(Color, Boolean) Adds a color to the selector.

Parameters

color
Color to add

 

Set(UInt32[], Boolean) Sets a bulk set of colors.

Parameters

colors
An array containing the colors

 

OnApplyTemplate() This is called when the template has been bound to the control.

 

  

 

 

 

 

 

Implementing Custom Colors

The Color Picker has a More Colors button allowing the user to select a color that is not available in the standard color set.  In this example we will use a color picker found here and show it in a Dialog when the More Colors button is clicked.

Download these Silverlight Controls for free now! Download example  

 

When the Custom Colors button is clicked we show our Color Picker dialog.

<UserControl x:Class="ColorSelectorCustomButton.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:liquid="clr-namespace:Liquid;assembly=Liquid"
    xmlns:liquidPopup="clr-namespace:Liquid;assembly=Liquid.Popup"
    xmlns:custom="clr-namespace:ColorSelectorCustomButton"
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
    <Grid x:Name="LayoutRoot">
        <liquid:ColorSelector x:Name="selectColor" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10" SelectionChanged="selectColor_ItemSelected" CustomClick="selectColor_CustomClick" />
        <liquidPopup:Dialog x:Name="colorPickerDialog" Width="340" Height="390" Title="Color Picker" Buttons="OK,Cancel" IsMaximizeEnabled="False" Closed="colorPickerDialog_Closed">
            <custom:ColorPicker x:Name="colorPicker" Margin="2" />
        </liquidPopup:Dialog>
    </Grid>
</UserControl>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Liquid;
namespace ColorSelectorCustomButton
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }
        private void selectColor_ItemSelected(object sender, EventArgs e)
        {
            // Do something with the selected color
            Color color = selectColor.Selected;
            LayoutRoot.Background = new SolidColorBrush() { Color = color };
        }
        private void selectColor_CustomClick(object sender, RoutedEventArgs e)
        {
            // Show our color picker dialog
            colorPickerDialog.ShowAsModal();
        }
        private void colorPickerDialog_Closed(object sender, DialogEventArgs e)
        {
            if (colorPickerDialog.Result == DialogButtons.OK)
            {
                uint col = (uint)((colorPicker.Selected.A << 24) | (colorPicker.Selected.R << 16) | (colorPicker.Selected.G << 8) | colorPicker.Selected.B);
                
                // Assign the custom color to the next slot
                ColorSelector.Custom[ColorSelector.NextCustomSlot] = col;
                // Update the custom colors
                selectColor.Set(ColorSelector.Custom.ToArray(), true);
                // Update the selected color
                selectColor.Select(colorPicker.Selected);
            }
        }
    }
}

 

The colorPickerDialog_Closed event handler is responsible for setting the custom color in the Color Selector control and adding it to the custom colors list.