Странная проблема 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>