ItemsControlにスクロールバーを追加する方法について this 小さな「チュートリアル」に従いましたが、Designerビューで動作しますが、プログラムをコンパイルして実行するときは動作しません(最初のいくつかの項目のみが表示され、さらに表示するためのスクロールバーはありません-VerticalScrollbarVisibilityが「Auto」ではなく「Visible」に設定されている場合でも)。
これを解決する方法についてのアイデアはありますか?
これは、アイテムを表示するために使用するコードです(通常はデータバインディングで作業しますが、デザイナーでアイテムを表示するには手動で追加しました)。
<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>
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 プロパティを使用してみてください。
ScrollViewerをDockPanelに配置し、DockPanel MaxHeightプロパティを設定します
[...]
<DockPanel MaxHeight="700">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl ItemSource ="{Binding ...}">
[...]
</ItemsControl>
</ScrollViewer>
</DockPanel>
[...]