You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF MaterialDesign ScrollViewer右下角方块隐藏方法咨询

问题描述

基于MaterialDesign XAML模板自定义ScrollViewer后,当水平滚动条与垂直滚动条同时显示时,右下角会出现一个多余的方块,需要移除或隐藏该元素。自定义模板代码如下:

<ControlTemplate x:Key="CustomScrollViewer" TargetType="ScrollViewer">
    <Border x:Name="perp_ScrollViewerBorder" BorderBrush="{DynamicResource ResourceKey=perp_CT.ScrollViewer.Border}" Background="{DynamicResource ResourceKey=perp_CT.ScrollViewer.Background}" BorderThickness="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ContentBorderThickness}" CornerRadius="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ContentBorderCornerRadius}">
        <ScrollViewer Background="{TemplateBinding Background}" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
            <ScrollViewer.Content>
                <ContentPresenter Content="{TemplateBinding Content}" Margin="5"></ContentPresenter>
            </ScrollViewer.Content>
        </ScrollViewer>
    </Border>
    <ControlTemplate.Resources>
        <Style TargetType="{x:Type ScrollBar}" BasedOn="{StaticResource MaterialDesignScrollBar}">
            <Setter Property="wpf:ScrollBarAssist.ThumbCornerRadius" Value="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ThumbCornerRadius}"/>
            <Setter Property="wpf:ScrollBarAssist.ButtonsVisibility" Value="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ButtonsVisibility}"/>
            <Setter Property="wpf:ScrollBarAssist.ThumbWidth" Value="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ThumbWidth}"/>
            <Setter Property="wpf:ScrollBarAssist.ThumbHeight" Value="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ThumbHeight}"/>
            <Style.Triggers>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="wpf:ScrollBarAssist.ButtonsVisibility" Value="Collapsed"></Condition>
                        <Condition Property="Orientation" Value="Vertical"></Condition>
                    </MultiTrigger.Conditions>
                    <Setter Property="Margin" Value="1 5 2 5"></Setter>
                </MultiTrigger>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="wpf:ScrollBarAssist.ButtonsVisibility" Value="Collapsed"></Condition>
                        <Condition Property="Orientation" Value="Horizontal"></Condition>
                    </MultiTrigger.Conditions>
                    <Setter Property="Margin" Value="5 2 5 3"></Setter>
                </MultiTrigger>
            </Style.Triggers>
        </Style>
    </ControlTemplate.Resources>
</ControlTemplate>

右下角方块截图

解决方案

这个右下角方块是MaterialDesign ScrollViewer模板中默认显示的滚动条交汇角落元素,可通过两种方式处理:

  1. 优化模板结构(推荐):原模板嵌套了多余的ScrollViewer,导致双重滚动逻辑,直接用ScrollContentPresenter构建标准模板结构,同时通过附加属性隐藏角落元素。
  2. 快速隐藏:在现有嵌套的ScrollViewer上添加MaterialDesign的附加属性,直接隐藏角落方块。
修改后的代码示例

方式一:优化模板结构

<ControlTemplate x:Key="CustomScrollViewer" TargetType="ScrollViewer">
    <Border x:Name="perp_ScrollViewerBorder" 
            BorderBrush="{DynamicResource perp_CT.ScrollViewer.Border}" 
            Background="{DynamicResource perp_CT.ScrollViewer.Background}" 
            BorderThickness="{DynamicResource perp_DT.ScrollViewer.ContentBorderThickness}" 
            CornerRadius="{DynamicResource perp_DT.ScrollViewer.ContentBorderCornerRadius}">
        <Grid>
            <ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
                                    Margin="5"
                                    Content="{TemplateBinding Content}"
                                    CanContentScroll="{TemplateBinding CanContentScroll}"/>
            <ScrollBar x:Name="PART_VerticalScrollBar"
                       HorizontalAlignment="Right"
                       Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                       Value="{TemplateBinding VerticalOffset}"
                       Maximum="{TemplateBinding ScrollableHeight}"
                       ViewportSize="{TemplateBinding ViewportHeight}"/>
            <ScrollBar x:Name="PART_HorizontalScrollBar"
                       VerticalAlignment="Bottom"
                       Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                       Value="{TemplateBinding HorizontalOffset}"
                       Maximum="{TemplateBinding ScrollableWidth}"
                       ViewportSize="{TemplateBinding ViewportWidth}"/>
        </Grid>
    </Border>
    <ControlTemplate.Resources>
        <Style TargetType="{x:Type ScrollBar}" BasedOn="{StaticResource MaterialDesignScrollBar}">
            <Setter Property="materialDesign:ScrollBarAssist.ThumbCornerRadius" Value="{DynamicResource perp_DT.ScrollViewer.ThumbCornerRadius}"/>
            <Setter Property="materialDesign:ScrollBarAssist.ButtonsVisibility" Value="{DynamicResource perp_DT.ScrollViewer.ButtonsVisibility}"/>
            <Setter Property="materialDesign:ScrollBarAssist.ThumbWidth" Value="{DynamicResource perp_DT.ScrollViewer.ThumbWidth}"/>
            <Setter Property="materialDesign:ScrollBarAssist.ThumbHeight" Value="{DynamicResource perp_DT.ScrollViewer.ThumbHeight}"/>
            <Style.Triggers>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="materialDesign:ScrollBarAssist.ButtonsVisibility" Value="Collapsed"/>
                        <Condition Property="Orientation" Value="Vertical"/>
                    </MultiTrigger.Conditions>
                    <Setter Property="Margin" Value="1 5 2 5"/>
                </MultiTrigger>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="materialDesign:ScrollBarAssist.ButtonsVisibility" Value="Collapsed"/>
                        <Condition Property="Orientation" Value="Horizontal"/>
                    </MultiTrigger.Conditions>
                    <Setter Property="Margin" Value="5 2 5 3"/>
                </MultiTrigger>
            </Style.Triggers>
        </Style>
    </ControlTemplate.Resources>
    <!-- 隐藏角落交汇元素 -->
    <Setter Property="materialDesign:ScrollViewerAssist.CornerVisibility" Value="Collapsed"/>
</ControlTemplate>

方式二:快速修改现有模板

<ControlTemplate x:Key="CustomScrollViewer" TargetType="ScrollViewer">
    <Border x:Name="perp_ScrollViewerBorder" BorderBrush="{DynamicResource ResourceKey=perp_CT.ScrollViewer.Border}" Background="{DynamicResource ResourceKey=perp_CT.ScrollViewer.Background}" BorderThickness="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ContentBorderThickness}" CornerRadius="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ContentBorderCornerRadius}">
        <!-- 添加属性隐藏角落方块 -->
        <ScrollViewer Background="{TemplateBinding Background}" 
                      VerticalScrollBarVisibility="Auto" 
                      HorizontalScrollBarVisibility="Auto"
                      materialDesign:ScrollViewerAssist.CornerVisibility="Collapsed">
            <ScrollViewer.Content>
                <ContentPresenter Content="{TemplateBinding Content}" Margin="5"></ContentPresenter>
            </ScrollViewer.Content>
        </ScrollViewer>
    </Border>
    <ControlTemplate.Resources>
        <Style TargetType="{x:Type ScrollBar}" BasedOn="{StaticResource MaterialDesignScrollBar}">
            <Setter Property="wpf:ScrollBarAssist.ThumbCornerRadius" Value="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ThumbCornerRadius}"/>
            <Setter Property="wpf:ScrollBarAssist.ButtonsVisibility" Value="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ButtonsVisibility}"/>
            <Setter Property="wpf:ScrollBarAssist.ThumbWidth" Value="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ThumbWidth}"/>
            <Setter Property="wpf:ScrollBarAssist.ThumbHeight" Value="{DynamicResource ResourceKey=perp_DT.ScrollViewer.ThumbHeight}"/>
            <Style.Triggers>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="wpf:ScrollBarAssist.ButtonsVisibility" Value="Collapsed"></Condition>
                        <Condition Property="Orientation" Value="Vertical"></Condition>
                    </MultiTrigger.Conditions>
                    <Setter Property="Margin" Value="1 5 2 5"></Setter>
                </MultiTrigger>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="wpf:ScrollBarAssist.ButtonsVisibility" Value="Collapsed"></Condition>
                        <Condition Property="Orientation" Value="Horizontal"></Condition>
                    </MultiTrigger.Conditions>
                    <Setter Property="Margin" Value="5 2 5 3"></Setter>
                </MultiTrigger>
            </Style.Triggers>
        </Style>
    </ControlTemplate.Resources>
</ControlTemplate>

注意:确保XAML文件头部已引入MaterialDesign命名空间:xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"

内容的提问来源于stack exchange,提问作者Luuke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:15:40