1

我試圖通過綁定將一組圖像放置在畫布上的某些位置。Windows Phone綁定圖像位置

出於某種原因,圖像正在顯示,但不在我指定的位置。

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> 

XPositionYPosition都是int類型。我曾嘗試將它們改爲雙倍,但圖像仍未顯示在我想要的位置。它們只顯示在屏幕的左上角 - 彼此重疊。

任何人都可以看到問題嗎?

回答

1

您使用的包格式爲URI,僅當您的圖像的Build Action爲「Embedded Resource」時纔有效。即使如此,我不確定這URI格式實際上是否支持Image.Source,如果URI必須是RelativeAbsolute。檢查圖像Build ActionRight click --> Properties對這些文件)並嘗試更改UriKind

無論哪種方式,除非你有一個很好的理由,最好讓媒體資產:
Build Action = Content和使用普通路徑URIs。由於將更大的DLLs加載到AppDomain需要更長的時間,因此將圖像添加到DLLs作爲嵌入式資源對啓動性能不利。
從內存使用的角度來看,這也不好,因爲加載到內存中的DLLs現在變大了。

底線:

<Image Source="myPicture.png" />格式是性能比

<Image Source="myAssemblyName;component/myPicture.png" />語法好得多。

+0

URI不是問題。 Canvas.Left和Canvas.Top屬性不起作用。 URI的綁定非常好。這是沒有經過的XPosition和YPosition - 即圖像不在他們想要的位置。 – Subby 2013-02-13 23:50:42

+0

是項目集合嗎? 「Room.Items」實際上是如何這些屬性?或者「Room.Items」集合中的項目是否具有該屬性? – JustinAngel 2013-02-13 23:55:46

+0

項目是一個集合,是的。是的,一個Item有XPosition和YPosition的屬性。 – Subby 2013-02-14 10:56:47

1

您的C#代碼包含圖像集合。

您的XAML只顯示單個圖像。如果XAML位於列表框數據模板中,您將看到幾個畫布,每個畫布有1個圖像。

要在單個Canvas上顯示圖像集合,可以使用例如<ItemsControl>,將ItemsPanel設置爲Canvas,並在數據模板中指定包含source,canvas.left和canvas.top的單個圖像。

如果你正在試圖用ListBox而不是ItemsControl來描述它,它不會工作,因爲它在ItemsPanel和item之間還有一層UI元素,即item容器。

P.S.解決這些GUI問題的最快方法 - XAML Spy,我爲自己買了個人許可證。評估長達21天,功能齊全。

+0

謝謝Soonts。你能不能好好地製作XAML,以便我能夠確切地看到你的意思?請? – Subby 2013-02-15 08:35:36