0

Blend 2012 Metro Store App(Windows 8)で使用するサンプルデータとしてBitmapImageを作成する方法はありますか?

私は次のように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が表示されているので、バインディングは正しいです。

どんな助けでもいただければ幸いです。

4

1 に答える 1

0

それが実際のコードなのか疑似コードなのかはわかりませんが、投稿した内容にはいくつかの問題があります。

まず、WebThumbnail プロパティは変更通知をサポートしていません。プロパティはコンストラクターで設定されるため、問題はありませんが、後でこれを非同期に行うことにした場合、バインディングが発生した後にプロパティが入力され、変更通知がなければ UI が更新されない可能性があります。

次に、ViewModel を Page リソースとして作成しましたが、それをページの DataContext として設定した箇所はどこにもありません。ViewModel は必ずしもリソースとして設定する必要はなく、DataContext または d:DataContext プロパティで直接設定できます。ItemIdが表示されていると言っているので、このリソースをDataContextに接続するためにxamlまたはコードを別の場所に持っているか、テキストボックスにデフォルト値を持っている可能性がありますか?

PixelWidth と PixelHeight がゼロである理由については、コンストラクターを呼び出した直後で、BitmapImage が実際に画像データを非同期でダウンロードする前に確認しているのかもしれません。これらの値は実際には後で入力される可能性がありますが、ページの DataContext を適切に設定していないと、画像が表示されません。

これが実際に起こっていることでない場合は、URL に問題がある可能性があります。まず、既知の画像の URL をオンラインで試します。URL がブラウザーで機能することを確認してから、コードで試してください。URL がローカル ファイルの場合は、ファイルがプロジェクトに埋め込まれている場合はms-appx:/// のように使用する必要がある特別なプレフィックスがあります。アプリのローカル フォルダー、アプリのローミング フォルダーにある場合はms-appdata:///roaming/...など (3 つのスラッシュに注意してください)。

それが役立つことを願っています...

于 2012-09-18T21:22:44.420 に答える