【问题标题】:C# Display JPG Image with WPF doesn't workC# 使用 WPF 显示 JPG 图像不起作用
【发布时间】:2014-05-27 18:06:02
【问题描述】:

对于一个项目,我必须在没有数据绑定的情况下显示 JPG 照片,并且不使用 XAML 文件中的源代码。为此,我想使用此功能:

private void updatephoto(string urlphoto)
{
   photo.Source = new BitmapImage(new Uri(String.Format("{0}", urlphoto), UriKind.Relative));
}

因为我的老师在他的例子中使用了它,并且对他来说它有效! 我的课是这样组成的(摘录):

class Recette
{
    public String photo { get; private set; }
}

使用允许字符串作为相对路径的构造函数。在带有 Source="nameofile.jpg" 的 XAML 文件中使用相对路径可以正常工作,但是在我的 MainWindows.xaml.cs 中,我想使用它来显示照片:

Recette selectedRecette;
void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   selectedRecette = (sender as ComboBox).SelectedItem as Recette;
   updatephoto(selectedRecette.photo);
}

最后一行调用:

     private void updatephoto(string urlphoto)
     {
         photo.Source = new BitmapImage(new Uri(String.Format("{0}", urlphoto), UriKind.Relative));
     }

在 XAML 中,图像是:

< Image Height="100" Name="photo" HorizontalAlignment="Center"/ >

所以我不明白为什么这不起作用

【问题讨论】:

  • 在什么情况下不起作用?更具体
  • “编译”时什么都没有出现,它是空白的,但是如果我直接在XAML代码中输入Source="namephoto.jpg",我可以正常看到照片:/
  • 硬编码“更新照片”中的字符串是否有效?您从组合框中获取的数据会是垃圾吗?
  • 数据是正确的,我已经在文本框中显示它,这是文件的好名字,如果我直接在 updatephoto 中硬编码字符串,它也不起作用:(还有其他想法吗?如果您更喜欢我可以截取我的窗口或上传项目,或者如果有人愿意并且有时间,可以上传 Teamviewer/Skype:/?
  • 你有很多信息,只是试图填补一些空白。如果您可以访问您的讲师示例,您是否检查过相对路径是否相同,该文件实际上是否可以通过相对路径访问?绝对路径有用吗?

标签: c# image xaml


【解决方案1】:

您说绝对路径有效,这太棒了!您的代码完全按预期工作。

你总是可以使用绝对路径,声明:

String path = @"C:\Users\user\Documents\Visual Studio 2013\Projects\projetf - Copie\td6bis\flamby.jpg";

完全有效,因为有“@”符号。它说整个字符串是一个字符串文字,所以'\'字符不会转义任何东西。

如果您确实需要相对路径,则该路径可能并未指向您认为的位置。关键是所有的相对路径都是相对于可执行文件的工作目录。这通常是可执行文件所在的文件夹,但有些地方会变得很奇怪。

相对路径的快速入门:

  1. 如果您的路径只是一个文件名(即“test.jpg”),则该文件需要位于执行目录中。

  2. 如果路径看起来像普通路径(即@"Images\test.jpg"),那么它会在包含图像文件的执行目录中查找名为“Images”的文件夹。

  3. 如果你有点,那么它会“向上”目录树(即。@“..\Images\test.jpg”)。这会从执行目录上升一个目录,查找名为“Images”的文件夹并在那里查找图像文件。

完全随机的信息;声明String.Format({0}, "MySTring")"MySTring" 做同样的事情。如果您只有一个参数,并且该参数是整个字符串,那么 String.Format 没有任何理由。

【讨论】:

  • 谢谢!所以我会放完整的路径! ^^ 我的文件在执行目录中,这是因为我在质疑我 :( 并使用 XAML 文件中的相对路径作为源代码!但不是在 C# 中......这很奇怪!所以我将使用完整路径谢谢!^^
  • 相对路径没有错,只要确保它们指向文件的实际位置(很容易搞砸)。绝对路径更安全,但(显然)更冗长。绝对路径也会带来一个问题,即它们可能无法在另一台计算机上运行(除非他将您的应用程序放入与您相同的目录结构中)。
  • @Playzare,只是为了让您了解 StackOverflow 上的一项功能,当您觉得自己有一个很好的答案时(请稍等片刻以确保没有更多人进来!)您可以单击绿色您认为最能帮助您“接受”的答案旁边的复选标记。这会告诉社区什么对您的帮助最大,并为您和回答者提供一些声誉(当然没有义务这样做,只要确保您了解它!)。
  • 谢谢!我检查了你的答案,因为你帮了我很多!谢谢,如果我做错了告诉我,因为我不知道它是否正确检查:)
  • @Playzare,当您接受检查时,检查“填充”(离开悬停后仍然如此)。您还会看到因接受答案而获得的声誉 +2。您可以通过访问帮助了解更多关于如何使用 StackOverlow 的信息:stackoverflow.com/tour 和元站点。欢迎使用 StackOverflow!
猜你喜欢
  • 2010-10-08
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
相关资源
最近更新 更多