Selon un message à la fin de this thread, vous pouvez remplacer le ScrollViewer
d'un ListBox
par un ContentPresenter
pour désactiver le défilement dans un scénario imbriqué. Cependant, je ne sais pas comment remplacer le ScrollViewer
. Dois-je recréer le modèle?Comment remplacer un ScrollViewer avec un ContentPresenter sur un ListBox?
2
A
Répondre
3
Oui, vous devrez affecter votre propre modèle, mais vous utiliserez un ItemsPresenter, et non ContentPresenter. Le modèle par défaut pour ListBox inclut un ScrollViewer enroulé autour de son ItemsPresenter. En faisant une copie du modèle, vous pouvez simplement supprimer le ScrollViewer et laisser le reste du modèle (et le comportement) intact. Ceci est le modèle par défaut sans le ScrollViewer (vous pouvez également supprimer le Trigger IsGrouping si vous le souhaitez):
<ControlTemplate TargetType="{x:Type ListBox}">
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="true">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
</Trigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Fonctionne bien. Merci! –