У меня есть набор элементов, каждый из которых имеет имя и подколлекцию блобов изображений. Я хочу отобразить 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, чтобы окружить докладчика средством просмотра прокрутки. Но все равно не повезло: /