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

■ ListBox 클래스 : 색상 리스트 박스 사용하기

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


TestProject.zip


ColorListBoxItem.cs

 

 

using System.Windows;

using System.Windows.Controls;

using System.Windows.Media;

using System.Windows.Shapes;

 

namespace TestProject

{

    /// <summary>

    /// 색상 리스트 박스 항목

    /// </summary>

    public class ColorListBoxItem : ListBoxItem

    {

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

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

 

        #region Field

 

        /// <summary>

        /// 텍스트

        /// </summary>

        private string text;

 

        /// <summary>

        /// 사각형

        /// </summary>

        private Rectangle rectangle;

 

        /// <summary>

        /// 텍스트 블럭

        /// </summary>

        private TextBlock textBlock;

 

        #endregion

 

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

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

 

        #region 텍스트 - Text

 

        /// <summary>

        /// 텍스트

        /// </summary>

        public string Text

        {

            set

            {

                this.text = value;

 

                string result = this.text[0].ToString();

 

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

                {

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

                }

 

                this.textBlock.Text = result;

            }

            get

            {

                return this.text;

            }

        }

 

        #endregion

        #region 색상 - Color

 

        /// <summary>

        /// 색상

        /// </summary>

        public Color Color

        {

            set

            {

                this.rectangle.Fill = new SolidColorBrush(value);

            }

            get

            {

                SolidColorBrush solidColorBrush = this.rectangle.Fill as SolidColorBrush;

 

                return solidColorBrush == null ? Colors.Transparent : solidColorBrush.Color;

            }

        }

 

        #endregion

 

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

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

 

        #region 생성자 - ColorListBoxItem()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public ColorListBoxItem()

        {

            StackPanel stackPanel = new StackPanel();

 

            stackPanel.Orientation = Orientation.Horizontal;

 

            Content = stackPanel;

 

            this.rectangle = new Rectangle();

 

            this.rectangle.Width  = 16;

            this.rectangle.Height = 16;

            this.rectangle.Margin = new Thickness(2);

            this.rectangle.Stroke = SystemColors.WindowTextBrush;

 

            stackPanel.Children.Add(this.rectangle);

 

            this.textBlock = new TextBlock();

 

            this.textBlock.VerticalAlignment = VerticalAlignment.Center;

            this.textBlock.Margin            = new Thickness(2, 0, 0, 0);

 

            stackPanel.Children.Add(this.textBlock);

        }

 

        #endregion

 

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

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

 

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

 

        /// <summary>

        /// 문자열 구하기

        /// </summary>

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

        public override string ToString()

        {

            return this.text;

        }

 

        #endregion

 

        ////////////////////////////////////////////////////////////////////////////////////////// Protected

 

        #region 선택시 처리하기 - OnSelected(e)

 

        /// <summary>

        /// 선택시 처리하기

        /// </summary>

        /// <param name="e">이벤트 인자</param>

        protected override void OnSelected(RoutedEventArgs e)

        {

            base.OnSelected(e);

 

            this.textBlock.FontWeight = FontWeights.Bold;

        }

 

        #endregion

        #region 선택 해제시 처리하기 - OnUnselected(e)

 

        /// <summary>

        /// 선택 해제시 처리하기

        /// </summary>

        /// <param name="e">이벤트 인자</param>

        protected override void OnUnselected(RoutedEventArgs e)

        {

            base.OnUnselected(e);

 

            this.textBlock.FontWeight = FontWeights.Regular;

        }

 

        #endregion

    }

}

 

 

ColorListBox.cs

 

 

using System.Reflection;

using System.Windows.Controls;

using System.Windows.Media;

 

namespace TestProject

{

    /// <summary>

    /// 색상 리스트 박스

    /// </summary>

    public class ColorListBox : ListBox

    {

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

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

 

        #region 선택 색상 - SelectedColor

 

        /// <summary>

        /// 선택 색상

        /// </summary>

        public Color SelectedColor

        {

            set

            {

                SelectedValue = value;

            }

            get

            {

                return (SelectedValue == null) ? Colors.Transparent : (Color)SelectedValue;

            }

        }

 

        #endregion

 

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

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

 

        #region 생성자 - ColorListBox()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public ColorListBox()

        {

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

 

            foreach(PropertyInfo propertyInfo in propertyInfoArray)

            {

                ColorListBoxItem colorListBoxItem = new ColorListBoxItem();

 

                colorListBoxItem.Text  = propertyInfo.Name;

                colorListBoxItem.Color = (Color)propertyInfo.GetValue(null, null);

 

                Items.Add(colorListBoxItem);

            }

 

            SelectedValuePath = "Color";

        }

 

        #endregion

    }

}

 

 

MainWindow.cs

 

 

using System;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Media;

 

namespace TestProject

{

    /// <summary>

    /// 메인 윈도우

    /// </summary>

    public class MainWindow : Window

    {

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

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

 

        #region 생성자 - MainWindow()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainWindow()

        {

            Width      = 800d;

            Height     = 600d;

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

            FontSize   = 16d;

            Title      = "ListBox 클래스 : 색상 리스트 박스 사용하기";

 

            ColorListBox colorListBox = new ColorListBox();

 

            colorListBox.Height = 150;

            colorListBox.Width  = 150;

 

            colorListBox.SelectionChanged += colorListBox_SelectionChanged;

 

            Content = colorListBox;

 

            colorListBox.SelectedIndex = 0;

        }

 

        #endregion

 

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

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

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

 

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

 

        /// <summary>

        /// 프로그램 시작하기

        /// </summary>

        [STAThread]

        private static void Main()

        {

            Application application = new Application();

 

            application.Run(new MainWindow());

        }

 

        #endregion

 

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

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

 

        #region 색상 리스트 박스 선택 변경시 처리하기 - colorListBox_SelectionChanged(sender, e)

 

        /// <summary>

        /// 색상 리스트 박스 선택 변경시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void colorListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)

        {

            ColorListBox colorListBox = sender as ColorListBox;

 

            Background = new SolidColorBrush(colorListBox.SelectedColor);

        }

 

        #endregion

    }

}

 

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

Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요