WPF Set Background from C#


In Windows Presentation Foundation (WPF), how do you set the Background color of a TextBox or other element from the C# Code-Behind? Normally we set this in the XAML, and it doesn’t change throughout the program. What if we need to change at run time? What if a user clicks a button to change the background color of something on the GUI? Suppose we have options or preferences in our program?

BrushConverter

Below is a screenshot and the code for the project.

<Window x:Class="BindingCodeBehindPreferences.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:BindingCodeBehindPreferences"
        mc:Ignorable="d"
        WindowStartupLocation="CenterScreen"
        Title="BindingCodeBehindPreferences" Height="150" Width="360">
    <StackPanel>
        <TextBlock Name="txtBlk" Background="White" Margin="6,2,2,2">Set Background from Code-Behind to #98FB98</TextBlock>
        <Label Name="lbl" Background="White" Margin="6,2,2,2">Set Background from Code-Behind to #FAEBD7</Label>
        <Ellipse Name="ell" Margin="2,2,2,2" Height="10" Width="10" Fill="White"/>
        <TextBox Name="txtBox" Height="26" Width="100" Margin="6,2,2,2" Background="White"/>
    </StackPanel>
</Window>

Below is the C# code behind. Notice that we can set the color with a string. We could have read that string from a SQLite database and set it in the code behind.

using System.Windows;
using System.Windows.Media;
namespace BindingCodeBehindPreferences
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var bc = new BrushConverter();
            txtBlk.Background = (Brush)bc.ConvertFrom("#98FB98");
            lbl.Background = (Brush)bc.ConvertFrom("#FAEBD7");
            ell.Fill = (Brush)bc.ConvertFrom("#0000FF");
            
            txtBox.Background = (Brush)bc.ConvertFrom("#FF00AB");
            txtBox.Background = new SolidColorBrush(Colors.LightPink);
        }
    }
}