1

バインディングを使用して、キャンバス上の特定の場所に画像のコレクションを配置しようとしています。

何らかの理由で、画像は表示されていますが、指定した場所にありません。

C#

_roomView.Room = new Room
{
   Items = new List<Item> {
   new Item {ImageUri = "/Escape;component/Images/Items/a.jpg", XPosition = 190, YPosition = 50},
   new Item {ImageUri = "/Escape;component/Images/Items/b.png", XPosition = 390, YPosition = 100},
   new Item {ImageUri = "/Escape;component/Images/Items/b.png", XPosition = 490, YPosition = 600}}
};

listBoxItems.ItemsSource = _roomView.Room.Items;

XML

<Canvas>
     <Image Source="{Binding ImageUri}" Stretch="None" Canvas.Left="{Binding Room.Items.XPosition}" Canvas.Top="{Binding Room.Items.YPosition}"/>
</Canvas>

XPositionおよびYPositionint 型です。それらを2倍に変更しようとしましたが、画像はまだ必要な場所に表示されていません。それらは画面の左上にのみ表示されます-互いの上に。

誰でも問題を見ることができますか?

4

2 に答える 2

1

画像に " "URIがある場合にのみ有効なパック形式を使用しています。それでも、この形式が実際にサポートされているかどうかはわかりません。画像(それらのファイル) を確認し、.Build ActionEmbedded ResourceURIImage.SourceURIRelativeAbsoluteBuild ActionRight click --> PropertiesUriKind

いずれにしても、よほどの理由がない限り、メディア アセットを次のように保持し
Build Action = Content、通常のパスを使用することをお勧めしますURIs。に画像を埋め込みリソースとして追加すると、大きなファイルをDLLsにロードするのに時間がかかるため、起動時のパフォーマンスが低下します。メモリにロードされるものが大きくなった ため、メモリ使用量の観点からも悪いです。DLLsAppDomain
DLLs

結論:

<Image Source="myPicture.png" />フォーマットよりもパフォーマンスがはるかに優れています。

<Image Source="myAssemblyName;component/myPicture.png" />構文。

于 2013-02-13T23:18:33.513 に答える
1

C# コードには画像のコレクションがあります。

XAML には 1 つの画像しか表示されません。XAML がリストボックス データ テンプレートにある場合、それぞれ 1 つの画像を含む複数のキャンバスが表示されます。

単一の Canvas に画像のコレクションを表示するには、たとえば<ItemsControl>、ItemsPanel を Canvas に設定し、データ テンプレートで source、canvas.left、および canvas.top を使用して単一の画像を指定します。

ItemsControl の代わりに ListBox を使用して説明したことを実行しようとしている場合、ItemsPanel とアイテムの間に UI 要素のレイヤーがもう 1 つあるため、機能しません。つまり、アイテム コンテナーです。

PS このような GUI の問題をトラブルシューティングする最速の方法 - XAML Spy、個人ライセンスを購入しました。評価期間は 21 日間で、完全に機能します。

于 2013-02-15T02:30:59.310 に答える