2011-06-25 30 views
1

我試圖想像一個List<MyCustomClass>
每個項目應該在一個矩形(帶有圓角,但這是另一個mattter),垂直重複項目之間的餘量。如何在垂直重複的ItemsControl中繪製矩形和邊距的項目?

我已經試過這一點,但項目是重疊的:

<ItemsControl Name="ItemsControl1"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
       <Canvas Margin="10,10,10,10" Background="CornflowerBlue" > 

        <Rectangle Fill="Blue" Stroke="Blue" Width="350" Height="100"> 

        </Rectangle> 
        <TextBlock Text="{Binding Headline}" Canvas.Left="25" Canvas.Top="10" /> 
        <TextBlock Text="{Binding MyDate}" Canvas.Left="55" Canvas.Top="40"/> 
        <Button Content="Click me" Click="Button_Click" Width="80" Height="25" Canvas.Left="200" Canvas.Top="20" /> 
       </Canvas>        
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

我怎樣才能解決這個問題? 我猜矩形對象本身是錯誤的方法。其實我認爲Canvas本身可以繪製背景顏色。

回答

3

一個Canvas不會自動大小它所包含的內容。爲此,您可以使用其他佈局元素,例如Grid。但是,Canvas方便佈置兒童的位置,如你所做的。現在,您的Canvas的尺寸爲0,0,這就是爲什麼ItemsControl面板將它們堆疊在一起。

如果你想繼續使用Canvas,然後只需指定大小自己,例如:

<Canvas Width="300" Height="100" ...> 

或任何價值意義的正確的外觀。

如果您切換到Grid,那麼您可以使用Margin屬性指定兒童的位置。請注意,默認情況下,沒有行或列的Grid將堆疊元素堆疊在一起,因此在這方面它非常類似於Canvas。只需使用Margin即可。

0

你有沒有嘗試設置ItemsPanel模板:

<ItemsControl ItemsSource="{Binding FeedItems}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Vertical" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      ... etc ... 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

仍然看起來一樣: - | – citronas