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

■ ListBox 클래스 : ItemTemplate 속성을 사용해 색상 리스트 박스 만들기

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


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.cs

 

 

using System;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Media;

using System.Windows.Shapes;

 

namespace TestProject

{

    /// <summary>

    /// 메인 윈도우

    /// </summary>

    public class MainWindow : Window

    {

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

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

 

        #region 생성자 - MainWindow()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainWindow()

        {

            Width      = 800;

            Height     = 600;

            Title      = "ListBox 클래스 : ItemTemplate 속성을 사용해 색상 리스트 박스 만들기";

            FontFamily = new FontFamily("나눔고딕코딩");

            FontSize   = 16;

 

            #region 데이터 템플리트를 생성한다.

 

            DataTemplate dataTemplate = new DataTemplate(typeof(NamedBrush));

 

            FrameworkElementFactory stackPanelFrameworkElementFactory = new FrameworkElementFactory(typeof(StackPanel));

 

            stackPanelFrameworkElementFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);

 

            dataTemplate.VisualTree = stackPanelFrameworkElementFactory;

 

            FrameworkElementFactory rectangleFrameworkElementFactory = new FrameworkElementFactory(typeof(Rectangle));

 

            rectangleFrameworkElementFactory.SetValue(Rectangle.WidthProperty , 16d                         );

            rectangleFrameworkElementFactory.SetValue(Rectangle.HeightProperty, 16d                         );

            rectangleFrameworkElementFactory.SetValue(Rectangle.MarginProperty, new Thickness(2)            );

            rectangleFrameworkElementFactory.SetValue(Rectangle.StrokeProperty, SystemColors.WindowTextBrush);

 

            rectangleFrameworkElementFactory.SetBinding(Rectangle.FillProperty, new Binding("Brush"));

 

            stackPanelFrameworkElementFactory.AppendChild(rectangleFrameworkElementFactory);

 

            FrameworkElementFactory textBlockFrameworkElementFactory = new FrameworkElementFactory(typeof(TextBlock));

 

            textBlockFrameworkElementFactory.SetValue(TextBlock.VerticalAlignmentProperty, VerticalAlignment.Center);

            textBlockFrameworkElementFactory.SetValue(TextBlock.TextProperty             , new Binding("Name")     );

 

            stackPanelFrameworkElementFactory.AppendChild(textBlockFrameworkElementFactory);

 

            #endregion

 

            ListBox listBox = new ListBox();

 

            listBox.Width  = 200;

            listBox.Height = 150;

 

            Content = listBox;

 

            listBox.ItemTemplate = dataTemplate;

 

            listBox.ItemsSource = NamedBrush.NamedBrushArray;

 

            listBox.SelectedValuePath = "Brush";

 

            listBox.SetBinding(ListBox.SelectedValueProperty, "Background");

 

            listBox.DataContext = this;

        }

 

        #endregion

 

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

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

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

 

        #region 프로그램 시작하기 - Main()

 

        /// <summary>

        /// 프로그램 시작하기

        /// </summary>

        [STAThread]

        public static void Main()

        {

            Application application = new Application();

 

            application.Run(new MainWindow());

        }

 

        #endregion

    }

}

 

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

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요