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模板中默认显示的滚动条交汇角落元素,可通过两种方式处理:
- 优化模板结构(推荐):原模板嵌套了多余的ScrollViewer,导致双重滚动逻辑,直接用
ScrollContentPresenter构建标准模板结构,同时通过附加属性隐藏角落元素。 - 快速隐藏:在现有嵌套的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
相关产品推荐
相关产品推荐

