Вертикальная полоса прокрутки Silverlight ItemsControl с использованием оболочки в качестве ControlTemplate

У меня есть набор элементов, каждый из которых имеет имя и подколлекцию блобов изображений. Я хочу отобразить Accordion, где каждый элемент представляет каждый из MainElements. внутри каждого элемента я показываю изображения в подколлекции указанного MainElement. Размер Accordion изменяется пользователем, поэтому я использую оболочку для представления изображений. Когда гармошка становится достаточно широкой, изображения меняют порядок, помещая столько, сколько возможно в каждой строке. проблема возникает, когда панель-оболочка отображает только одно изображение в строке (потому что места для большего не хватает), список изображений продолжается, но я не могу видеть все изображения, потому что они не помещаются в пределах высоты элемента управления. Мне нужно, чтобы внутри AccordionItem отображалась вертикальная полоса прокрутки, чтобы я мог прокручивать список изображений вниз. Итак, вот мой код:

<layoutToolkit:Accordion Width="Auto" Height="Auto" ItemsSource="{Binding MainElementCollection}">
    <layoutToolkit:Accordion.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding MainElementName}" />
        </DataTemplate>
    </layoutToolkit:Accordion.ItemTemplate>
    <layoutToolkit:Accordion.ContentTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding SubElementCollection}" ScrollViewer.VerticalScrollBarVisibility="Auto" >
                    <ItemsControl.Template>
                        <ControlTemplate>
                            <controlsToolkit:WrapPanel />
                        </ControlTemplate>
                    </ItemsControl.Template>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Image Margin="2" Width="150" Source="{Binding PreviewImage, Converter={StaticResource ImageConverter}}" />
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
        </DataTemplate>
    </layoutToolkit:Accordion.ContentTemplate>
</layoutToolkit:Accordion>

http://www.silverlightshow.net/tips/How-to-add-scrollbars-to-ItemsControl.aspx предлагает мне окружить мою оболочку-оболочку средством просмотра прокрутки, например

                <ItemsControl.Template>
                    <ControlTemplate>
                        <scrollviewer>
                        <controlsToolkit:WrapPanel />
                        </scrollviewer>
                    </ControlTemplate>
                </ItemsControl.Template>

Но затем моя оболочка становится совсем маленькой, и я вижу только небольшую вертикальную полосу прокрутки. Есть идеи? Большое спасибо.

Изменить: я подумал, что оболочка теряет ширину при использовании в шаблоне управления

Его следует использовать следующим образом:

                               <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                            <controlsToolkit:WrapPanel ScrollViewer.VerticalScrollBarVisibility="Visible" />
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>

В любом случае, я попытался добавить строку ScrollViewer.VerticalScrollBarVisibility = "Visible", но снова застрял.

Отредактировано снова:

Теперь моя обертка выглядит так:

                    <ItemsControl ItemsSource="{Binding StageVideos}">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                    <controlsToolkit:WrapPanel />
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Image Margin="2" Width="150" Cursor="Hand" MouseLeftButtonDown="videoPreview_MouseLeftButtonDown" Tag="{Binding}" Source="{Binding PreviewImage, Converter={StaticResource ImageConverter}}" />
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                        <ItemsControl.Template>
                            <ControlTemplate>
                                <ScrollViewer VerticalScrollBarVisibility="Visible">
                                    <ItemsPresenter />
                                </ScrollViewer>
                                </ControlTemplate>
                        </ItemsControl.Template>
                    </ItemsControl>

Я использую панель-оболочку в качестве панели элементов, и я использую ControlTemplate, чтобы окружить докладчика средством просмотра прокрутки. Но все равно не повезло: /


person Orestes    schedule 15.03.2010    source источник


Ответы (1)


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

               <ItemsControl ItemsSource="{Binding StageVideos}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                                <controlsToolkit:WrapPanel />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Image Margin="2" Width="150" Cursor="Hand" MouseLeftButtonDown="videoPreview_MouseLeftButtonDown" Tag="{Binding}" Source="{Binding PreviewImage, Converter={StaticResource ImageConverter}}" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                    <ItemsControl.Template>
                        <ControlTemplate>
                            <ScrollViewer VerticalScrollBarVisibility="Visible">
                                <ItemsPresenter />
                            </ScrollViewer>
                            </ControlTemplate>
                    </ItemsControl.Template>
                </ItemsControl>
person Orestes    schedule 15.03.2010