2015-06-12 4 views
0

Я создаю приложение для Windows Store. Я сталкиваюсь с проблемой при попытке сравнить фон с цветом.Сравнение Button.Background с цветами


Что делает моя программа. На экране есть много кнопок, и одним нажатием любой кнопки он меняет цвет фона на красный или зеленый. Начиная с красного цвета и переключения цвета за клик. Теперь я хочу, чтобы кнопки, которые уже были нажаты, их background не должны меняться. Таким образом, фоновая проверка if заявление, чтобы пропустить код изменения цвета background.

Это мой код:

private void changecolor(object sender, RoutedEventArgs e) 
{ 
    if ((sender as Button).Background != "Red" && (sender as Button).Background != "Green") 
    { 
     if (counter == 1) 
     { 
      (sender as Button).Background = new SolidColorBrush(Windows.UI.Colors.Green); 
      (sender as Button).Content = "Green"; 

      counter = 0; 
     } 
     else if (counter == 0) 
     { 
      (sender as Button).Background = new SolidColorBrush(Windows.UI.Colors.Red); 
      (sender as Button).Content = "Red"; 

      counter = 1; 
     } 
    }  
} 

На первом if заявлении, я хочу, чтобы проверить, если Background не Red или Green.

(sender as Button).Background != Windows.UI.Colors.Red

(sender as Button).Background != "Red"

Приведенный выше код не работает.


Что я пишу на месте «Красный», чтобы провести сравнение?

+0

Возможно, код ошибки, который вы видите, может быть полезен. Вы можете видеть, что вы устанавливаете значение свойства «Background» для «SolidColorBrush», что, очевидно, не совпадает с «строкой» с именем цвета. –

+0

@ dubstylee Вот ошибки Оператор '! =' Не может быть применен к операндам типа «Windows.UI.Xaml.Media.Brush» и «Windows.UI.Color» Оператор '! =' Не может быть применен к операнды типа «Windows.UI.Xaml.Media.Brush» и «строка» –

+0

Короткий ответ: замените '' Red ''на' Brushes.Red'. Более подробный ответ ниже. –

ответ

1

я, наконец, получил ответ на этот вопрос.

благодарю вас @dub Stylee и @Hans Passant

Я касте background как solidcolorbrush затем использовали его свойство color и сравнил его с Windows.Ui.Colors.Green

Вот код.

if (((sender as Button).Background as SolidColorBrush).Color != Windows.UI.Colors.Green && ((sender as Button).Background as SolidColorBrush).Color != Windows.UI.Colors.Red) 
0

Вот пример из документации MSDN для Control класса (который наследуется от Button):

void ChangeBackground(object sender, RoutedEventArgs e) 
{ 
    if (btn.Background == Brushes.Red) 
    { 
     btn.Background = new LinearGradientBrush(Colors.LightBlue, Colors.SlateBlue, 90); 
     btn.Content = "Control background changes from red to a blue gradient."; 
    } 
    else 
    { 
     btn.Background = Brushes.Red; 
     btn.Content = "Background"; 
    } 
} 

Полный текст статьи можно рассматривать here.

Так, чтобы применить это к текущему коду, вы можете просто изменить свое первое if заявление выглядеть следующим образом:

var redBrush = new SolidColorBrush(Colors.Red); 
var greenBrush = new SolidColorBrush(Colors.Green); 

if ((sender as Button).Background == redBrush || 
    (sender as Button).Background == greenBrush) 
+0

Какой заголовок используется в кистях, потому что я не могу добавить его в свой код. Кисти не существуют в текущем контексте –

+0

'System.Windows.Media' –

+0

Я не могу добавить этот заголовок. вот мои заголовки. 'using System; с использованием System.Collections.Generic; с использованием System.IO; с использованием System.Linq; с использованием System.Runtime.InteropServices.WindowsRuntime; с использованием Windows.Foundation; с использованием Windows.Foundation.Collections; с использованием Windows.UI.Xaml; с использованием Windows.UI.Xaml.Controls; с использованием Windows.UI.Xaml.Controls.Primitives; с использованием Windows.UI.Xaml.Data; с использованием Windows.UI.Xaml.Input; с использованием Windows.UI.Xaml.Media; с использованием Windows.UI.Xaml.Navigation; using System.Diagnostics; ' У меня нет кистей. Не работает как кисти. –

Смежные вопросы