KeiStory

WPF SetBinding 을 이용해 ListBox 선택에 따른 배경색 변경하기

 

ListBox 에 Color List 를 바인딩하고 선택한 Color 를 배경색으로 설정하는 방법입니다.

 

MainWindow.xaml

<Window x:Class="WPFTest.MainWindow"
        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:local="clr-namespace:WPFTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

</Window>

 

MainWindow.xaml.cs

using System.Reflection;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;

namespace WPFTest
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            Title = "List Color";

            // 윈도우 Content를 위한 리스트 박스 생성
            ListBox listbox = new ListBox();
            listbox.Width = 150;
            listbox.Height = 150;

            Content = listbox;

            // label 컨트롤로 리스트 박스를 채움
            PropertyInfo[] props = typeof(Colors).GetProperties();

            foreach (PropertyInfo prop in props)
            {
                Color color = (Color)prop.GetValue(null, null);
                bool isBlack = .222 * color.R + .707 * color.G + .071 * color.B > 128;

                Label label = new Label();
                label.Content = prop.Name;
                label.Background = new SolidColorBrush(color);
                label.Foreground = isBlack ? Brushes.Black : Brushes.White;
                label.Width = 100;
                label.Margin = new Thickness(15, 0, 0, 0);
                label.Tag = new SolidColorBrush(color);

                listbox.Items.Add(label);
            }

            listbox.SelectedValuePath = nameof(Label.Tag);
            listbox.SetBinding(ListBox.SelectedValueProperty, nameof(List.Background));
            listbox.DataContext = this;
        }
    }
}

 

결과

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band