在Blend 2012的设计模式下查看样例数据的位图图像



有没有办法创建一个BitmapImage作为样本数据,用于Blend 2012 Metro Store应用程序(在Windows 8上)?

我有一个ViewModel如下:

public ItemDesignDataVM()
{
WebThumbnail = new BitmapImage(new Uri(???));
}
public string ItemId { get { return "123456"; } }
public BitmapImage WebThumbnail { get; private set; }

我想在Xaml中这样结合它:

<Page.Resources>
<DesignData:ItemDesignDataVM x:Key="ItemDesignDataVM" />
</Page.Resources>
<TextBox Text="{Binding ItemId}" />
<Image Source="{Binding WebThumbnail}" />

问题是,无论我传递给BitmapImage构造函数什么,它都无法创建。我尝试过各种不同的相对路径和绝对路径。

如果我附加到XDesProc.exe进程并调试该代码路径,则BitmapImage.PixelHeight和PixelWidth为0,我认为这意味着它们尚未加载。

我的绑定是正确的,因为我在设计器中看到了ItemId。

如有任何帮助,我们将不胜感激。

我不知道这是实际代码还是伪代码,但我发现您发布的内容存在一些问题。

首先,WebThumbnail属性不支持更改通知。由于该属性是在构造函数中设置的,您应该可以,但如果您后来决定异步执行此操作,则可以在绑定发生后填充该属性,并且如果没有更改通知,UI将永远不会更新。

接下来,尽管您已经将ViewModel创建为页面资源,但我看不到您在任何地方将其设置为页面的DataContext。ViewModel不一定要设置为资源,它可以直接在DataContext或d:DataContext属性上设置。既然你说你看到了ItemId,你要么在其他地方有xaml或代码来将这个资源连接到DataContext,要么在文本框中有一个默认值?

至于为什么PixelWidth和PixelHeight为零,也许你是在调用构造函数之后,在BitmapImage真正有机会异步下载图像数据之前检查它的?这些值以后可能会被填充,但如果您没有正确设置页面的DataContext,您将永远看不到图像。

如果事实并非如此,那么URL可能会出现问题。首先,在线尝试已知图像的URL。请确保URL在浏览器中有效,然后在代码中进行尝试。如果URL是本地文件的,则需要使用一些特殊前缀,如ms-appx://如果文件嵌入到您的项目中,则ms-appdata:///local/...如果它在您的应用程序本地文件夹中,ms-appdata:///roaming/...如果它在你的应用程序漫游文件夹中,等等(注意3个斜杠)。

希望能有所帮助。。。

最新更新