2017-02-18 15 views
-1

私はC#でWPFプロジェクトを作成しています。私はbuttonを持っています。buttonをクリックすると、が変更されます。しかし、まず、buttonの現在のbackground imageを別のものと比較し、それを変更したいと考えています。これは私のコードです:ボタンの背景イメージと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では、通常、(Visual Studioプロジェクトの)画像ファイルの**ビルドアクション**を**リソース**に設定し、それを[リソースファイルパックURI](https://msdn.microsoft)でロードします。新しいBitmapImage(新しいUri( "pack:// application:,,,/images/homeLightsOn.jpg")のように.com/en-us/library/aa970069(v = vs.110).aspx) ); ' – Clemens

答えて

1

あなたは、単に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"/> 

を2 ImageBrushesを保存し、このようなあなたのクリックハンドラを記述できます。これはおそらく仕事ができる方法

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

ありがとうございます!出来た!! –

関連する問題