答案 0 :(得分:1)
您是否需要将图像设为“内容 - 如果更新则复制”?如果将其切换为“资源”,则可以使用以下路径引用该文件:
"/MyImage.JPG"
或更长版本
"pack://application:,,,/MyImage.JPG"
假设图像位于项目的根目录中,否则只需将URI更改为
"/Some/Path/MyImage.JPG"
对我来说,较长的包uri语法适用于标记为“内容 - 如果更新则复制”的图像。但是,较短的语法不起作用。即:
这有效:
"pack://application:,,,/MyImage.JPG"
这 NOT 工作:
"/MyImage.JPG"
我的示例我将图像添加到项目的根目录,并将其标记为“内容”。然后,我将设计时数据上下文绑定到视图模型,其中属性返回上面的更长包URI。这样做会导致在设计时正确显示内容图像。
如果要从包uri加载位图源,可以使用BitmapFrame.Create
的另一个重载,它将URI作为第一个参数。
如果我正确理解您的问题,您将获得包uri的字符串作为传递给转换器的对象数组中的第一项。从此字符串中,您要加载BitmapSource。
由于字符串包含包URI,您可以从字符串创建实际的URI,然后使用该URI加载BitmapSource:
var imagePath = values[0] as string;
// ...
try
{
var packUri = new Uri(imagePath);
BitmapSource bitmap = BitmapFrame.Create(packUri, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
{
// ...
}
}
}
答案 1 :(得分:0)
只需在 ImagePath 属性中返回实体中图像的确切路径,例如..
“C:\ myImage.jpg” 这个参数
...
OR
...
“C:\ MyApp的\ BIN \调试\ myImage.jpg” 这个参数
然后.xaml中的绑定(即<Image Source="{Binding ImagePath}" />
)将开始工作..
答案 2 :(得分:0)
我通过利用this stackoverflow answer中找到的聪明人解决了这个问题。
public class DMyViewModel : PhotoViewModelBase
{
public override string ImagePath
{
get
{
string applicationDirectory =
(from assembly in AppDomain.CurrentDomain.GetAssemblies()
where assembly.CodeBase.EndsWith(".exe")
select System.IO.Path.GetDirectoryName(assembly.CodeBase.Replace("file:///", ""))
).FirstOrDefault();
return applicationDirectory + "\\MyImage.JPG";
}
}
}