【问题标题】:An image isn't loaded if I call MainWindow.xaml from another assembly如果我从另一个程序集调用 MainWindow.xaml,则不会加载图像
【发布时间】:2018-10-17 16:21:09
【问题描述】:

那里有两个程序集。例如 A 和 B。 图片位于项目 A 中:/Resources/images/Question.png。 当我从其项目中调用程序集 A 的窗口时, - 一切正常。图片在那里。

当我从程序集 B 调用程序集 A 的窗口时。-窗口本身是可以的。图片不见了。

有没有办法解决这个问题?

 private void SetImage(string imageName)
    {
        string uri = string.Format("/Resources/images/{0}", imageName);
        var uriSource = new Uri(uri, UriKind.RelativeOrAbsolute);
        img.Source = new BitmapImage(uriSource);
    }

谢谢。

【问题讨论】:

  • 如果我使用这种方法,我必须把它放在哪里?查看更新。
  • 问题是您正在从另一个线程加载图像。您需要先冻结图像,以便它可以跨线程使用。查找“如何在 WPF 中冻结图像”。
  • @ASilva 你怎么知道还有另一个线程? 实际的问题是,在后面的代码中,您必须使用完整的 Pack URI,包括引用的程序集名称。
  • @Clemens 我对此并不强硬。我想你是对的。 :-)

标签: c# wpf image


【解决方案1】:

将引用程序集的名称添加到图像的 Pack URI:

private void SetImage(string imageName)
{
    var uri = "pack://application:,,,/AssemblyName;component/Resources/images/"
            + imageName;

    img.Source = new BitmapImage(new Uri(uri));
}

AssemblyName 替换为包含图像资源的程序集的名称。

【讨论】:

  • "AssemblyName" 哪个程序集名称? A 或 B。
  • 顺便说一句,我总是尝试对有帮助的答案进行评分。但是这个页面总是回应这样的东西“它的声誉还不够”。无论如何,请给我一个建议,如何接受有用的答案。
  • 只需单击左侧的复选标记,在向上/向下投票按钮下方。
  • 哦..复选标记。我有你。你能看看这个话题吗? stackoverflow.com/questions/52855899/…
猜你喜欢
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多