Windows 8 给定的系统。URI不能被转换成一个窗口。

Windows 8 给定的系统。URI不能被转换成一个窗口。,windows-8,windows-runtime,Windows 8,Windows Runtime,我正在尝试以编程方式在XAML Metro应用程序中加载BitmapImage。这是我的密码: var uri = new Uri("/Images/800x600/BackgroundTile.bmp", UriKind.RelativeOrAbsolute); var imageSource = new BitmapImage(uri); 第二行因System.ArgumentException崩溃: 给定的系统。URI不能转换成窗口。详情请参阅 链接只会转到MSDN主页,因此没有任何用处

我正在尝试以编程方式在XAML Metro应用程序中加载BitmapImage。这是我的密码:

var uri = new Uri("/Images/800x600/BackgroundTile.bmp", UriKind.RelativeOrAbsolute);
var imageSource = new BitmapImage(uri);
第二行因System.ArgumentException崩溃:

给定的系统。URI不能转换成窗口。详情请参阅

链接只会转到MSDN主页,因此没有任何用处

我还尝试删除前面的
/
,以防WinRT对相对URI有不同的期望,但我仍然得到相同的异常

为什么我会因为一个似乎完全有效的URI而得到这个异常?

从中判断,WinRT似乎不支持相对URI。我尝试了一个,但这给了我一个UriFormatException,所以显然在WinRT中也不是这样做的

我在上找到了答案:MS为WinRT资源发明了另一种URI格式。这项工作:

new Uri("ms-resource://MyAssembly/Images/800x600/BackgroundTile.bmp")

请注意,您没有添加实际的程序集名称--
MyAssembly
部分是文本。

在消费者预览中,正确的URL格式显然已更改为
ms-appx:/Images/800x600/BackgroundTile.bmp
您需要使用页面的
BaseUri
属性或图像控件的
BaseUri
属性,如下所示:

//using the page's BaseUri property
BitmapImage bitmapImage = new BitmapImage(this.BaseUri,"/Images/800x600/BackgroundTile.bmp");
image.Source = bitmapImage;


您可以查看原因和解决方案

如果您仍有问题或被要求查找应用程序以打开链接,您是否正在尝试使用WebView?如果是,请尝试使用ms appx web而不是ms appx

例如:

this.webBrowser.Navigate(new Uri("ms-appx-web:///level/level/level/index.html"));
    imageIcon.Source = new BitmapImage(new Uri(this.BaseUri, "Assets/file.gif"));
还要注意缺少URIKind参数——显然在这些实例中根本不需要


(我相信您可能需要根据您的引用更改前导的前斜杠)

这在XAML中适用,但在代码中不适用。。。因此,每个控件或页面都有一个BaseUri属性,您可以使用它为资产构建适当的uri。。。以下是一个例子:

this.webBrowser.Navigate(new Uri("ms-appx-web:///level/level/level/index.html"));
    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://协议。

我知道这很旧,但我希望这能有所帮助。我用XAML写了这篇文章,它对我很有用。我使用的Ide是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>

MVVM;)


你尝试过新的基础URI吗?有可能吗?似乎没有一个窗口。它是文档化的(),但是当我尝试<代码>新的Windows .Foundation。URI()>代码>时,VS2011在“URI”下显示了一个红色凸出的下划线,提示“类型或命名空间”URI不存在于命名空间“Windows .Foundation”中(您是否缺少程序集引用?)这是在我的UI程序集中,所以它应该已经有了所有重要的引用。@Joe该类在WinRT中,但是.NET projection对您隐藏它,就像它隐藏例如
iInterable
IVector
一样。事实上,你应该只使用
System.Uri
@PavelMinaev,我以为投影应该是统一平台,而不是划分平台。为什么有一个系统?Uri和一个在运行时有损转换的窗口?这仅仅是因为这是一个开发人员预览,还是它在发布产品中会那么糟糕?@Joe还说,这不是一个有损转换(因为它实际上不允许您转换它)。将其视为先决条件:任何接受
Uri
的WinRT方法都需要绝对
Uri
。在.NET术语中,就好像它有
if(uri.IsAbsoluteUri)抛出新的ArgumentException()
——这在.NET中是完全有效的,而且通常是相当合理的。您可以链接到一些文档吗?我从“”中看到,
ms-appx
可以从JavaScript中工作,但是它也可以用于基于XAML的UI吗?是的,我可以确认它也可以用于基于XAML的UI。我还没有找到关于它的任何文档-只有尝试和错误导致了这个结果。我被要求“查找应用程序”来打开URI,而不是导航到资源。有什么想法吗?这个.webBrowser.Navigate(新Uri(“ms”)-appx://Assets/HTML/HelpPage/help.html")); (我试过用1、2和3个前导斜杠也没用)我想你没有抓住问题的关键。当然,它在XAML中工作。问题不是在XAML中引用图像。这是关于引用代码中的图像。考虑添加文本到您的答案中。