简体   繁体   中英

how to change button background color in c#

How can I change button background color programatically in Windows Phone Application. Here is my xaml code.

<Style TargetType="Button" x:Key="TabButtonLast">
        <Setter Property="Foreground" Value="Navy"/>
        <Setter Property="Background" Value="Green" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border CornerRadius="15,15,15,15" Background="Green" >
                        <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center"  VerticalAlignment="Center"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
<Button Name="btnNext" Style="{StaticResource TabButtonLast}" Content="Next" Height="23" HorizontalAlignment="Left" Margin="131,311,0,0" VerticalAlignment="Top" Width="75" Click="btnNext_click" />

I tried using "using System.Drawing" yourButtonName.BackColor = Color.Red; but it doesn't seem to work.Any help will be greatly appreciated.

You need to modify your style as follows:

<Style TargetType="Button" x:Key="TabButtonLast">
        <Setter Property="Foreground" Value="Navy"/>
        <Setter Property="Background"
    Value="{Binding Background, RelativeSource={RelativeSource Self}}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border CornerRadius="15,15,15,15" Background="{TemplateBinding Background}">
                        <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center"  VerticalAlignment="Center"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

1) If you want static background:

<Button Background="Red" Name="btnNext" Style="{StaticResource TabButtonLast}" Content="Next" Height="23" HorizontalAlignment="Left" Margin="131,311,0,0" VerticalAlignment="Top" Width="75" Click="btnNext_click" />

2) To change Backcolor from code:

private void ChangeButtonColor()
{
btnNext.Background = "Red";
}

3) Using MVVM approach example:

"Frontend":

<Window x:Class="WpfApplication3.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:WpfApplication3"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>

        <Style TargetType="Button" x:Key="TabButtonLast">
            <Setter Property="Foreground" Value="Navy"/>
            <Setter Property="Background"
        Value="{Binding Background, RelativeSource={RelativeSource Self}}"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border CornerRadius="15,15,15,15" Background="{TemplateBinding Background}">
                            <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center"  VerticalAlignment="Center"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>

    <Grid>
        <Button Style="{StaticResource TabButtonLast}" Content="CHANGE COLOR" Background="{Binding BtnBackColor}" 
                  Margin="50" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="Button_Click" />
    </Grid>

</Window>

"Backend":

  using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Media;

namespace WpfApplication3
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        public Brush BtnBackColor { get; set; } = new SolidColorBrush(Colors.Red);
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Random r = new Random();

            //Without Binding variant
            //btnNext.Background = new SolidColorBrush(Color.FromRgb((byte)r.Next(1, 255),
            //  (byte)r.Next(1, 255), (byte)r.Next(1, 233)));

            //MVVM approach variant
            BtnBackColor = new SolidColorBrush(Color.FromRgb((byte)r.Next(1, 255),
                (byte)r.Next(1, 255), (byte)r.Next(1, 233)));
            OnPropertyChanged("BtnBackColor");
        }
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

Smth like this should work...

您可以通过以下代码更改背景色:

btnNext.Background = new SolidColorBrush(Windows.UI.Colors.Red);

You can try it with Data Binding . Data Binding is a nice and simpel. At the beginning you have to read a little but it is worth it. Especially for MVVM applications.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM