첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

728x90
반응형

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>
728x90
반응형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요