如何用 ListBox 上的 ContentPresenter 替换 ScrollViewer?

发布于 2024-09-14 03:35:10 字数 273 浏览 7 评论 0原文

根据此帖子末尾的帖子,您可以替换ListBoxScrollViewerContentPresenter 可以在嵌套场景中禁用滚动。

但是,我不知道如何替换 ScrollViewer。我必须重新创建模板吗?

According to a post at the very end of this thread you can replace the ScrollViewer of a ListBox with a ContentPresenter to disable scrolling in a nested scenario.

However, I don't know how to replace the ScrollViewer. Do I have to re-create the template?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如何视而不见 2024-09-21 03:35:10

是的,您需要分配自己的模板,但您将使用 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>

Yes, you'll need to assign your own template but you'll be using an ItemsPresenter, not ContentPresenter. The default template for ListBox includes a ScrollViewer wrapped around its ItemsPresenter. By making a copy of the template you can just remove the ScrollViewer and leave the rest of the template (and behavior) intact. This is the default template without the ScrollViewer (you can also remove the IsGrouping Trigger if you want):

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文