2017-02-18 9 views
-1

Я создаю проект WPF на C#. У меня есть button, чей background image я хочу изменить, когда нажата кнопка button. Однако, во-первых, я хочу сравнить текущий background imagebutton с другим, а затем изменить его. Это мой код:Сравнить фоновое изображение кнопки на другое изображение в WPF

private void homeLightsButton_Click(object sender, RoutedEventArgs e) 
     { 
      //image for Lights ON 
      Uri lightsOn = new Uri("images/homeLightsOn.jpg", UriKind.Relative); 
      StreamResourceInfo streamInfo = Application.GetResourceStream(lightsOn); 
      BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream); 
      var brush = new ImageBrush(); 
      brush.ImageSource = temp; 

      //image for Lights OFF 
      Uri lightsOff = new Uri("images/homeLightsOff.jpg", UriKind.Relative); 
      StreamResourceInfo streamInfo1 = Application.GetResourceStream(lightsOff); 
      BitmapFrame temp1 = BitmapFrame.Create(streamInfo.Stream); 
      var brush1 = new ImageBrush(); 
      brush1.ImageSource = temp1; 

      if (homeLightsButton.Background == brush) 
      { 
       homeLightsButton.Background = brush1; 
      } 
      else 
      { 
       homeLightsButton.Background = brush; 
      } 
     } 

Проблема находится внутри if заявления; от того, что я понимаю, так как я сравниваю background image с другим image. Я искал форумы, но ничего не нашел. Есть идеи?

+0

Как это могло бы работать? Вы сравниваете 'homeLightsButton.Background' с новым созданным экземпляром ImageBrush. Это сравнение всегда будет возвращать 'false'. Кроме того, почему вы создаете BitmapFrame таким странным образом? В WPF вы обычно устанавливаете ** Build Action ** файла изображения (в проекте Visual Studio) на ** Resource ** и загружаете его с помощью [URI файла ресурса] (https://msdn.microsoft .com/en-us/library/aa970069 (v = vs.110) .aspx), например 'var bitmap = new BitmapImage (новый Uri (" pack: // application: ,,,/images/homeLightsOn.jpg ")); ' – Clemens

ответ

1

Вы можете просто хранить два ImageBrushes как XAML ресурсов

<Window.Resources> 
    <ImageBrush x:Key="homeLightsOn" ImageSource="images/homeLightsOn.jpg"/> 
    <ImageBrush x:Key="homeLightsOff" ImageSource="images/homeLightsOff.jpg"/> 
</Window.Resources> 

... 
<Button Background="{StaticResource homeLightsOff}" 
     Click="homeLightsButton_Click"/> 

и написать обработчик Нажмите так:

private void homeLightsButton_Click(object sender, RoutedEventArgs e) 
{ 
    var button = (Button)sender; 
    button.Background = button.Background == Resources["homeLightsOff"] 
     ? (ImageBrush)Resources["homeLightsOn"] 
     : (ImageBrush)Resources["homeLightsOff"]; 
} 
+0

спасибо! Это сработало!! –

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