2009-12-05 3 views
0

Я пытаюсь создать горизонтально ориентированный стек панель, которая содержит вертикально ориентированный стек панели элементов. Вот мой код.Weird ItemsPanelTemplate вопрос (возможно, Silverlight ошибка?)

Сначала XAML

<UserControl x:Class="SilverlightApplication1.MainPage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
> 

<UserControl.Resources> 
    <DataTemplate x:Key="SquareTemplate"> 
     <Border Margin="2" Background="Blue" Width="80" Height="80"/> 
    </DataTemplate> 

    <DataTemplate x:Key="VerticallyTiledItemTemplate"> 
     <ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource SquareTemplate}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Vertical" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
     </ItemsControl> 
    </DataTemplate>   
</UserControl.Resources> 

<Grid x:Name="LayoutRoot"> 
    <StackPanel Orientation="Horizontal"> 
     <ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource VerticallyTiledItemTemplate}"/> 
    </StackPanel> 
</Grid> 
</UserControl> 

Теперь код-за ...

namespace SilverlightApplication1 
{ 
    public partial class MainPage : UserControl 
    { 
     public ObservableCollection<ObservableCollection<object>> _myCollection = new ObservableCollection<ObservableCollection<object>>(); 

     public ObservableCollection<ObservableCollection<object>> MyCollection 
     { 
      get 
      { 
       return _myCollection; 
      } 
      set 
      { 
       _myCollection = value; 
      } 
     } 

     public MainPage() 
     { 
      InitializeComponent(); 
      LayoutRoot.DataContext = MyCollection; 

      for (int i = 0; i < 2; i++) 
      { 
       var innerCollection = new ObservableCollection<object>(); 

       for (int j = 0; j < 3; j++) 
       { 
        innerCollection.Add(new object()); 
       } 

       _myCollection.Add(innerCollection); 
      } 
     } 
    } 
} 

Я ожидал увидеть две колонны из трех синих квадратов, но вместо этого я вижу одна колонка из шести квадратов

Я могу ' я ничего не вижу о коде, который выскакивает у меня как вопиющий неправильный ...

Любые идеи?

Благодаря

ответ

1

Вы поместили корень ItemsControl в StackPanel, когда вы на самом деле хотите поместить элементы в ItemsControl в StackPanel. Измените следующим образом:

<Grid x:Name="LayoutRoot"> 
    <ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource VerticallyTiledItemTemplate}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal"/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</Grid> 
+1

Ha! Это было именно так, благодаря большому количеству Кента. – Senkwe

Смежные вопросы