WedX - журнал о программировании и компьютерных науках

как изменить цвет фона кнопки в c#

Как программно изменить цвет фона кнопки в приложении Windows Phone. Вот мой xaml-код.

<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" />

Я попытался использовать «используя System.Drawing» yourButtonName.BackColor = Color.Red; но, похоже, это не работает. Любая помощь будет принята с благодарностью.


  • Для какого события вы хотите изменить цвет фона? 28.07.2017
  • Я хотел знать, могу ли я установить цвет фона кнопки в коде С# вместо установки его в xaml. Я новичок в этом поле, извините, если я задаю неправильный вопрос. 28.07.2017
  • Как правило, вы хотите делать что-то в xaml, а не в коде C#, IMO. 28.07.2017

Ответы:


1

Вам нужно изменить свой стиль следующим образом:

<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) Если вы хотите статический фон:

<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) Чтобы изменить фоновый цвет из кода:

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

3) Использование примера подхода MVVM:

"Внешний интерфейс":

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="https://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="https://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>

«Бэкенд»:

  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));
        }
    }
}

Что-то вроде этого должно работать...

28.07.2017

2

вы можете изменить цвет фона в коде следующим образом:

btnNext.Background = new SolidColorBrush(Windows.UI.Colors.Red);
28.07.2017
  • Выдает ошибку, что имя Brushes не существует в текущем контексте. 28.07.2017

  • 3

    Вы можете попробовать это с помощью привязки данных. Привязка данных — это красиво и просто. В начале придется немного почитать, но оно того стоит. Особенно для приложений MVVM.

    28.07.2017
  • Пожалуйста, не обращайтесь к общей документации, а будьте более конкретными: попробуйте ответить на вопрос. 28.07.2017
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]