2
根据this thread末尾的帖子,您可以用ContentPresenter
替换ListBox
的ScrollViewer
,以禁用嵌套场景中的滚动。如何用ListBox上的ContentPresenter替换ScrollViewer?
但是,我不知道如何更换ScrollViewer
。我必须重新创建模板吗?
根据this thread末尾的帖子,您可以用ContentPresenter
替换ListBox
的ScrollViewer
,以禁用嵌套场景中的滚动。如何用ListBox上的ContentPresenter替换ScrollViewer?
但是,我不知道如何更换ScrollViewer
。我必须重新创建模板吗?
是的,您需要指定自己的模板,但您将使用ItemsPresenter而不是ContentPresenter。 ListBox的默认模板包含一个围绕其ItemsPresenter的ScrollViewer。通过制作模板的副本,您可以删除ScrollViewer,并保留模板(和行为)的其余部分不变。这是没有ScrollViewer的默认模板(如果需要,您也可以删除IsGrouping触发器):
<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>
很好用。谢谢! – 2010-08-17 01:16:43