Список с Wrappanel не будет отображать элементы

#silverlight #silverlight-4.0 #silverlight-toolkit #wrappanel

#silverlight #silverlight-4.0 #silverlight-инструментарий #wrappanel

Вопрос:

Я совершенно озадачен тем, почему, когда я добавляю WrapPanel для моей Silverlight 4 ListBox ItemsPanel, ничего не отображается. Если я только закомментирую ItemsPanel, я получу обычный вертикальный список моих маленьких картинок с текстом. Я добавил цвет фона к WrapPanel, просто чтобы убедить себя, что WrapPanel действительно там была. Я предполагаю, что я упускаю что-то глупое, что это?

     <ListBox Grid.Row="1" Grid.Column="1"
             ScrollViewer.HorizontalScrollBarVisibility="Disabled"
             MinHeight="24"
             >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Border> <StackPanel> <Image> <TextBlock> </StackPanel> </Border> (pseudo template)
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <toolkit:WrapPanel Background="Orange" />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>
  

Комментарии:

1. Вы видите панель переноса вообще или вы все еще видите белый фон?

2. Я не вижу никакой проблемы, но это ваш окончательный проект? и ссылается ли он на все необходимые библиотеки DLL для toolkit, например, toolkit. dll зависит от basetoolkit.dll . ваш пользовательский контроллер позволит вам добавить wrappanel из toolkit. dll, но если вы не ссылаетесь на basetoolkit. dll это может выдавать ошибку, не знаю, так ли это, но это может быть одной из причин, что вы видите в режиме конструктора? обнаруживаете ли вы какую-либо другую ошибку в окне вывода Visual Studio (debugger) при запуске проекта?

3. Я вижу оранжевый фон. Я использовал NuGet, чтобы добавить ссылку на «Silverlight Toolkit — Layout». Я не вижу никаких ошибок в окне вывода, связанных с этим.

4. Я добавил в свое окно отдельную wrappanel с двумя элементами в ней. Он отображается правильно.

5. Элементы в моем listbox не только не видны, они не создаются — потому что два URI, которые я устанавливаю для изображения. Недопустимый источник. Я перехватываю исключения, если использую ItemsPanel по умолчанию.

Ответ №1:

Я воспроизвел ваш сценарий, используя примерные данные Blend, и я могу видеть элементы внутри панели переноса:

     <UserControl
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
        x:Class="ASD_Answer012.MainPage"
        Width="640" Height="480">
        <UserControl.Resources>
            <DataTemplate x:Key="ItemTemplate">
                <StackPanel>
                    <TextBlock Text="{Binding Property1}"/>
                    <CheckBox IsChecked="{Binding Property2, Mode=TwoWay}"/>
                    <Image Source="{Binding Property3}" HorizontalAlignment="Left" Height="64" Width="64"/>
                </StackPanel>
            </DataTemplate>
            <ItemsPanelTemplate x:Key="ItemsWrapPanelTemplate">
                    <toolkit:WrapPanel Background="DarkOrange"/>
            </ItemsPanelTemplate>
        </UserControl.Resources>

        <Grid x:Name="LayoutRoot" Background="White" DataContext="{Binding Source={StaticResource SampleDataSource}}">
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <ListBox Grid.Column="1" Grid.Row="1" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding Collection}" ItemsPanel="{StaticResource ItemsWrapPanelTemplate}" ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
        </Grid>
    </UserControl>
  

Это то, что я получаю:
Элементы WrapPanel

Возможно, если вы предоставите более подробный XAML, можно будет воспроизвести точную проблему и решить ее.

Комментарии:

1. Спасибо вам за это. Я попытался переместить свои материалы в ресурсы и скопировать / вставить ваши материалы ItemsPanel, но безрезультатно.

Ответ №2:

Я понятия не имею, почему, но переключение на ObservableCollection для моего ItemsSource сделало свое дело. Понятия не имею, почему для панели ItemsPanel по умолчанию все будет вести себя иначе, чем для панели diff’t, но это произошло.

Спасибо, что изучили это.

Ответ №3:

Ничто в вашем шаблоне элемента не имеет никакого значения — он полон пустых элементов. Поместите что-нибудь туда, и вы должны увидеть результаты. например:

 <DataTemplate>
    <TextBlock>Test</TextBlock>
</DataTemplate>
  

Комментарии:

1. Извините за псевдо xaml. Я надеялся, что отсутствие закрывающих тегов прояснит это. Кроме того, я сказал, что если я закомментирую wrappanel, все будет отображаться правильно