我想向畫布添加動態橢圓數並設置橢圓位置(canvas.top,canvas.left)。我嘗試綁定到ItemsControl,但它的每個項目(橢圓)都有一個容器,所以我不能直接設置橢圓位置。我不想要一個項目容器,我只想要一個包含橢圓的畫布。Silverlight - 使用MVVM動態地將橢圓添加到畫布
可以這樣做嗎?
我想向畫布添加動態橢圓數並設置橢圓位置(canvas.top,canvas.left)。我嘗試綁定到ItemsControl,但它的每個項目(橢圓)都有一個容器,所以我不能直接設置橢圓位置。我不想要一個項目容器,我只想要一個包含橢圓的畫布。Silverlight - 使用MVVM動態地將橢圓添加到畫布
可以這樣做嗎?
試試這個 - 爲我工作 - 我用它將文本塊自由放置在畫布上。
Re:Re:定位項目,當畫布是一個ItemsControl的ItemsPanel 02-26-2010 7:17 AM |
還有另外一種更簡單的解決方案,它在Silverlight 3
<Canvas>
<ItemsControl ItemsSource={Binding MyItems}>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Canvas>
<TextBlock Canvas.Left={Binding Left} Canvas.Top={Binding Top} Text={Binding Text} />
</Canvas>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Canvas>
工作如果MyItems是是一類已經離開項目,頂部和文本公共屬性的列表,這工作正常。我也用線和邊界測試,以得出簡單的柱狀圖的圖形在Silverlight 3
從這個崗位的底部: http://forums.silverlight.net/forums/p/29753/450510.aspx#450510
與Silverlight的DataTemplateSelector結合起來,你可以改變你的對象基於視圖模型性質得出:
http://www.codeproject.com/KB/silverlight/SLTemplateSelector.aspx
通常情況下,我會說使用結合的ItemsControl
有Canvas
:
<ItemsControl ItemsSource="{Binding Ellipses}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemsContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
</Style>
</ItemsControl.ItemsContainerStyle>
</ItemsControl>
但在Silverlight suckiness的顯示,該ItemContainerStyle
屬性不上ItemsControl
工作。它有支持在ItemsControl
,但它不是由ItemsControl
本身公開。相反,它取決於ItemsControl
的子類 - 例如ListBox
- 來公開它。哦,這些子類必須由微軟提供,因爲功能是protected internal
,所以你不能僅僅子類ItemsControl
並且自己公開這些東西。 :S
因此,您可以使用ListBox
代替,可能是通過繼承它並將其項容器更改爲比ListBoxItem
更簡單的方法。或者,您可以直接使用ListBox
並撥動,直到ListBoxItem
按照您希望的方式顯示(即未選中)。
那麼有沒有辦法讓周圍的itemContainer? – chief7 2010-08-19 10:32:08
我剛纔在我的帖子中解釋瞭如何:S – 2010-08-19 10:54:09