WPF: ItemsControl с полосой прокрутки (ScrollViewer)
я следовал этой небольшой " учебник "о том, как добавить полосу прокрутки в ItemsControl, и он работает в режиме конструктора, но не тогда, когда я компилирую и выполняю программу (отображаются только первые несколько элементов, и нет полосы прокрутки для просмотра Больше - даже когда VerticalScrollbarVisibility установлен в" видимый "вместо"авто").
есть идеи, как это решить?
это код, который я использую, чтобы показать мои элементы (обычно я работаю с привязкой данных, но чтобы увидеть элементы в моем конструкторе я добавил их вручную):
<ItemsControl x:Name="itemCtrl" Style="{DynamicResource UsersControlStyle}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Top">
</StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<uc:UcSpeler />
<uc:UcSpeler />
<uc:UcSpeler />
<uc:UcSpeler />
<uc:UcSpeler />
</ItemsControl>
и это мой шаблон:
<Style x:Key="UsersControlStyle" TargetType="{x:Type ItemsControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ItemsControl}">
<Border SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}">
<ScrollViewer VerticalScrollBarVisibility="Visible">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
2 ответа:
чтобы получить полосу прокрутки для
ItemsControl
, вы можете разместить его вScrollViewer
такой:<ScrollViewer VerticalScrollBarVisibility="Auto"> <ItemsControl> <uc:UcSpeler /> <uc:UcSpeler /> <uc:UcSpeler /> <uc:UcSpeler /> <uc:UcSpeler /> </ItemsControl> </ScrollViewer>
вы должны изменить шаблон элемента управления вместо ItemsPanelTemplate:
<ItemsControl > <ItemsControl.Template> <ControlTemplate> <ScrollViewer x:Name="ScrollViewer" Padding="{TemplateBinding Padding}"> <ItemsPresenter /> </ScrollViewer> </ControlTemplate> </ItemsControl.Template> </ItemsControl>
возможно, ваш код не работает, потому что StackPanel имеет собственную функциональность прокрутки. Попробуйте использовать StackPanel.CanVerticallyScroll собственность.