Introduction
This blog introduce how to change the background color of ComboBox Control in
WPF, When its itm selected from items list.
To changed the background color of Combobox I have declared a class name mycolor
that has two properties(Name and Color), the color property contains solid color
of brush and declared a list(MyColors) in the view modelwhose datatype is
mycolor.
I have binded the list(MyColors) with combobox, Again a property named
ComboBoxBackColor declared to binded it with background property of ComboBox. In
the SelectionChanged Command of ComboBox I am changing the background color of
Combobox.
See the Bellow code fore more clarification:
XAML CODE
<window x:class="PrintingRichTextBoxContent.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
title="MainWindow" height="755" width="702" initialized="Window_Initialized_1">
<Grid HorizontalAlignment="Left" Height="725" VerticalAlignment="Top" Width="694">
<ComboBox HorizontalAlignment="Left" x:Name="cmbColor" Margin="11,695,0,0" VerticalAlignment="Top" Width="216" ItemsSource="{Binding MyColors}" DisplayMemberPath="Name" SelectedValuePath="Color" Background="{Binding Path=ComboBoxBackColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<i:Interaction.Triggers> <i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding ColorChangeCommand}" CommandParameter="{Binding ElementName=cmbColor, Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
</Grid>
</window>
View Model Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Practices.Prism.Commands;
using System.Windows.Controls;
using System.ComponentModel;
using System.Printing;
using System.Windows.Documents;
using System.Windows.Media;
namespace PrintingRichTextBoxContent
{
public class MainWindowViewModel : INotifyPropertyChanged
{
public DelegateCommand<object> ColorChangeCommand { get; set; }
public List<MyColors> MyColors { get; set; }
public Brush _ComboBoxBackColor;
public Brush ComboBoxBackColor
{
get
{
return _ComboBoxBackColor;
}
set
{
_ComboBoxBackColor = value;
OnPropertyChanged("ComboBoxBackColor");
}
}
public MainWindowViewModel()
{
this.MyColors = new List<MyColors>();
this.SetColors();
this.ComboBoxBackColor = Brushes.White;
this.ColorChangeCommand = new DelegateCommand<object>(ColorChangeCommand_Excute);
}
private void ColorChangeCommand_Excute(object arg)
{
this.ComboBoxBackColor = ((MyColors)arg).Color;
}
private void SetColors()
{
this.MyColors.Add(new MyColors() { Name = "Aqua", Color = Brushes.Aqua });
this.MyColors.Add(new MyColors() { Name = "Black", Color = Brushes.Black });
this.MyColors.Add(new MyColors() { Name = "Cyan", Color = Brushes.Cyan });
this.MyColors.Add(new MyColors() { Name = "Blue", Color = Brushes.Blue });
this.MyColors.Add(new MyColors() { Name = "Gray", Color = Brushes.Gray });
this.MyColors.Add(new MyColors() { Name = "DarkBlue", Color = Brushes.DarkBlue });
this.MyColors.Add(new MyColors() { Name = "FloralWhite", Color = Brushes.FloralWhite });
}
bool _IsDirty = false;
public event PropertyChangedEventHandler PropertyChanged;
public virtual bool IsDirty
{
get { return _IsDirty; }
set
{
_IsDirty = value;
OnPropertyChanged("IsDirty", false);
}
}
protected virtual void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(propertyName, true);
}
protected virtual void OnPropertyChanged(string propertyName, bool dirty)
{
if (dirty)
{
_IsDirty = true;
OnPropertyChanged("IsDirty", false);
}
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public class MyColors
{
public string Name { get; set; }
public Brush Color { get; set; }
}
}
Join the conversation! Your thoughts help the community grow.