C# 在wpf表单中单击按钮时更改背景图像源

C# 在wpf表单中单击按钮时更改背景图像源,c#,wpf,image,C#,Wpf,Image,我的默认背景图像是“lobby.jpg”,当我单击“Lights”按钮时,我希望它与“lobby1.jpg”交换,反之亦然。这些图像存储在“obj\Debug\images\”中 此外,我还想实现相对(?)imagesource uri,这样我就可以访问任何机器上的图像(无需使用整个uri,只需使用“obj\Debug\images\”) 编辑:所以主要的问题似乎是我试图改变窗口背景,但没有意识到它被页面的网格背景“覆盖”。因此,我所做的是将主窗口背景设置为“lobb.jpg”,我使网格背景不可

我的默认背景图像是
“lobby.jpg
”,当我单击
“Lights”
按钮时,我希望它与
“lobby1.jpg”
交换,反之亦然。这些图像存储在
“obj\Debug\images\”

此外,我还想实现相对(?)imagesource uri,这样我就可以访问任何机器上的图像(无需使用整个uri,只需使用
“obj\Debug\images\”


编辑:所以主要的问题似乎是我试图改变窗口背景,但没有意识到它被页面的网格背景“覆盖”。因此,我所做的是将主窗口背景设置为“lobb.jpg”,我使网格背景不可见,并使用答案中的代码在两个背景之间切换。

您可以使用AppDomain basepath来执行(这是最简单的方法)

例如:

  bool clicked = false;
    private void button_Click(object sender, RoutedEventArgs e)
    {
        var basePath = AppDomain.CurrentDomain.BaseDirectory;
        var imageDirPath = $"{basePath}\\Images\\";
        if (clicked)
            image.Source = new BitmapImage(new Uri(imageDirPath+ "lobby.jpg"));
        else
            image.Source = new BitmapImage(new Uri(imageDirPath + "lobby1.jpg"));
        clicked = !clicked;
    }

那么,我应该把这些线放在哪里?你可以在你想的时候用这条路。例如,在“灯光”按钮事件处理程序中。看我在顶部的答案这看起来应该可以工作,但我现在有一些“图像”-GUI中的控件名称(在我的示例中是-图像控件)。您可以使用具有其他名称的其他控件。关于c#6.0中带有$-新功能的字符串。您可以使用最后一个框架,或者将imageDirPath行更改为var imageDirPath=String.Format(“{0}\\Images\\”,basePath);我现在得到一个DirectoryNotFoundException,我检查了imageDirPath,出于某种原因,它是“basePath\\Images\”而不是“basePath\Images\”
  bool clicked = false;
    private void button_Click(object sender, RoutedEventArgs e)
    {
        var basePath = AppDomain.CurrentDomain.BaseDirectory;
        var imageDirPath = $"{basePath}\\Images\\";
        if (clicked)
            image.Source = new BitmapImage(new Uri(imageDirPath+ "lobby.jpg"));
        else
            image.Source = new BitmapImage(new Uri(imageDirPath + "lobby1.jpg"));
        clicked = !clicked;
    }