将按钮的背景图像与 WPF 中的另一个图像进行比较

Compare button's background image to another image in WPF

我正在用 C# 创建一个 WPF 项目。我有一个 button,我想在单击 button 时更改其 background image。但是,首先,我想将 button 的当前 background image 与另一个进行比较,然后进行更改。这是我的代码:

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 进行比较的方式是错误的。我搜索了论坛,但找不到任何东西。有什么想法吗?

您可以简单地将两个 ImageBrush 存储为 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"];
}