■ ListBox 클래스 : 데이터 템플리트를 사용해 색상 목록 만들기

----------------------------------------------------------------------------------------------------


TestProject.zip


NamedBrush.cs

 

 

using System.Reflection;

using System.Windows.Media;

 

namespace TestProject

{

    /// <summary>

    /// 이름있는 브러시

    /// </summary>

    public class NamedBrush

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 이름있는 브러시 배열

        /// </summary>

        private static NamedBrush[] _namedBrushArray;

 

        #endregion

 

        ////////////////////////////////////////////////////////////////////////////////////////// Instance

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 명칭

        /// </summary>

        private string name;

 

        /// <summary>

        /// 브러시

        /// </summary>

        private Brush brush;

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Public

 

        #region 이름있는 브러시 배열 - NamedBrushArray

 

        /// <summary>

        /// 이름있는 브러시 배열

        /// </summary>

        public static NamedBrush[] NamedBrushArray

        {

            get

            {

                return _namedBrushArray;

            }

        }

 

        #endregion

 

        ////////////////////////////////////////////////////////////////////////////////////////// Instance

        //////////////////////////////////////////////////////////////////////////////// Public

 

        #region 명칭 - Name

 

        /// <summary>

        /// 명칭

        /// </summary>

        public string Name

        {

            get

            {

                string name = this.name[0].ToString();

 

                for(int i = 1; i < this.name.Length; i++)

                {

                    name += (char.IsUpper(this.name[i]) ? " " : "") + this.name[i].ToString();

                }

 

                return name;

            }

        }

 

        #endregion

        #region 브러시 - Brush

 

        /// <summary>

        /// 브러시

        /// </summary>

        public Brush Brush

        {

            get

            {

                return this.brush;

            }

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Static

 

        #region 생성자 - NamedBrush()

 

        /// <summary>

        /// 생성자

        /// </summary>

        static NamedBrush()

        {

            PropertyInfo[] propertyInfoArray = typeof(Brushes).GetProperties();

 

            _namedBrushArray = new NamedBrush[propertyInfoArray.Length];

 

            for(int i = 0; i < propertyInfoArray.Length; i++)

            {

                _namedBrushArray[i] = new NamedBrush

                (

                    propertyInfoArray[i].Name,

                    (Brush)propertyInfoArray[i].GetValue(null, null)

                );

            }

        }

 

        #endregion

 

        ////////////////////////////////////////////////////////////////////////////////////////// Instance

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 생성자 - NamedBrush(name, brush)

 

        /// <summary>

        /// 생성자

        /// </summary>

        /// <param name="name">명칭</param>

        /// <param name="brush">브러시</param>

        private NamedBrush(string name, Brush brush)

        {

            this.name  = name;

            this.brush = brush;

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 문자열 구하기 - ToString()

 

        /// <summary>

        /// 문자열 구하기

        /// </summary>

        /// <returns>문자열</returns>

        public override string ToString()

        {

            return this.name;

        }

 

        #endregion

    }

}

 

 

MainWindow.xaml

 

 

<Window

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:src="clr-namespace:TestProject"

    Width="800"

    Height="600"

    Title="ListBox 클래스 : 데이터 템플리트를 사용해 색상 목록 만들기"

    FontFamily="나눔고딕코딩"

    FontSize="16"

    Background="{Binding ElementName=listBox, Path=SelectedValue}">

    <Window.Resources>

        <DataTemplate x:Key="DataTemplateKey" DataType="{x:Type src:NamedBrush}">

            <StackPanel Orientation="Horizontal">

                <Rectangle

                    Margin="2"

                    Width="16"

                    Height="16"

                    Stroke="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"

                    Fill="{Binding Path=Brush}" />

                <TextBlock

                    VerticalAlignment="Center"

                    Text="{Binding Path=Name}" />

            </StackPanel>

        </DataTemplate>

    </Window.Resources>

    <ListBox Name="listBox"

        HorizontalAlignment="Center"

        VerticalAlignment="Center"

        Width="150"

        Height="150"

        ItemTemplate="{StaticResource DataTemplateKey}"

        ItemsSource="{x:Static src:NamedBrush.NamedBrushArray}"

        SelectedValuePath="Brush" />

</Window>

 

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요