我正在尝试以编程方式在XAML Metro应用中加载BitmapImage。这是我的代码:
var uri = new Uri("/Images/800x600/BackgroundTile.bmp", UriKind.RelativeOrAbsolute);
var imageSource = new BitmapImage(uri);
第二行崩溃,出现System.ArgumentException:
无法将给定的System.Uri转换为Windows.Foundation.Uri。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=215849。
链接只是转到MSDN主页,所以没用。
我还尝试删除了前导/
,以防WinRT对相对URI有不同的期望,但我仍然得到相同的异常。
为什么我会为看似完全有效的URI获取此异常?
答案 0 :(得分:33)
在Consumer Preview中,正确的网址格式显然已更改为ms-appx:/Images/800x600/BackgroundTile.bmp
答案 1 :(得分:17)
从documentation for Windows.Foundation.Uri判断,看起来WinRT不支持相对URI。我尝试了一个pack://
URI,但这给了我一个UriFormatException,所以显然在WinRT中也不是这样做的。
我在this thread找到了答案:MS为WinRT资源发明了另一种 URI格式。这有效:
new Uri("ms-resource://MyAssembly/Images/800x600/BackgroundTile.bmp")
请注意,您不会添加实际的程序集名称 - MyAssembly
部分是文字文本。
答案 2 :(得分:2)
您需要使用页面的BaseUri
属性或图像控件的BaseUri
属性,如下所示:
//using the page's BaseUri property
BitmapImage bitmapImage = new BitmapImage(this.BaseUri,"/Images/800x600/BackgroundTile.bmp");
image.Source = bitmapImage;
或
//using the image control's BaseUri property
image.Source = new BitmapImage(image.BaseUri,"/Images/800x600/BackgroundTile.bmp");
您可以查看原因和解决方案here
答案 3 :(得分:0)
如果您仍然遇到问题或被要求查找应用程序以打开链接,您是否尝试使用WebView?如果是这样,请尝试使用ms-appx-web而不是ms-appx。
一个例子:
this.webBrowser.Navigate(new Uri("ms-appx-web:///level/level/level/index.html"));
另请注意缺少URIKind参数 - 在这些情况下根本不需要。
(我相信你可能需要根据你的参考来改变前导斜杠)
答案 4 :(得分:0)
这可以在XAML中使用但在代码中不起作用...所以每个控件或页面都有一个BaseUri属性,您可以使用它来为资产构建正确的uri ...这是一个例子:
imageIcon.Source = new BitmapImage(new Uri(this.BaseUri, "Assets/file.gif"));
//或者使用imageIcon中的基本uri,同样的事情
imageIcon.Source = new BitmapImage(new Uri(imageIcon.BaseUri, "Assets/file.gif"));
您还需要将构建操作设置为“内容”而不是嵌入式资源...否则您需要使用ms-resource://协议。
答案 5 :(得分:0)
我知道这已经老了,但我希望这会有所帮助。我在XAML中写了这个,它对我有用。 Ide I使用的是vs-2015和win-10。
<Window>
<Grid>
<Grid.Background>
<ImageBrush ImageSource="NameOfYourImage.JPG or any Image type"/>
</Grid.Background>
<GroupBox x:Name="groupBox" Header="GroupBox" HorizontalAlignment="Left" Height="248" Margin="58,33,0,0" VerticalAlignment="Top" Width="411">
<GroupBox.Background>
<ImageBrush ImageSource="NameOfYourImage.JPG or any Image type"/>
</GroupBox.Background>
</GroupBox>
</Grid>
</Window>
答案 6 :(得分:0)
MVVM;)
y