我正在使用我们创建的标准ControlTemplates来使用自定义滚动条,但是当我将它们应用于ListBox时,底部右侧有一个角落我无法找到任何方法覆盖它。
不幸的是,在我获得更多积分之前,我无法发布图片。但是,我所指的角落是当垂直和水平滚动条都出现时,底部右侧会有一个填充着浅灰色的空间,我无法覆盖它。
不幸的是,在我获得更多积分之前,我无法发布图片。但是,我所指的角落是当垂直和水平滚动条都出现时,底部右侧会有一个填充着浅灰色的空间,我无法覆盖它。
这是我从Blend中获取的ScrollViewer模板代码的一部分。我在右下角添加了一个矩形,并将Fill属性设置为红色。您可以以相同的方式对其进行样式设置,或者您可以扩展其中一个ScrollBar来覆盖该空间,使用Grid.RowSpan="2"来覆盖垂直滚动条(第一个),或使用Grid.ColumnSpan="2"来覆盖水平滚动条(第二个)。
<Style TargetType="{x:Type ScrollViewer}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollContentPresenter Grid.Column="0"/>
<ScrollBar Name="PART_VerticalScrollBar" Grid.Row="0" Grid.Column="1" Value="{TemplateBinding VerticalOffset}" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>
<ScrollBar Name="PART_HorizontalScrollBar" Orientation="Horizontal" Grid.Row="1" Grid.Column="0" Value="{TemplateBinding HorizontalOffset}" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
<Rectangle Grid.Row="1" Grid.Column="1" Fill="Red"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
另外两种解决方案也可行。
1) 矩形颜色是动态的,使用关键字"SystemColors.ControlBrushKey"。您可以在自定义样式或ScrollViewer控件(或其祖先之一)的资源中覆盖此关键字。来源:MSDN上的这个问题。
例子:
<!-- In a style -->
<Style x:Key="MyCustomScrollViewer" TargetType="{x:Type ScrollViewer}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
</Style.Resources>
</Style>
<!-- Or in the control -->
<ScrollViewer>
<ScrollViewer.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
</ScrollViewer.Resources>
</ScrollViewer>
2)将Rectangle
的样式设置为“Hidden”(与上面相同的位置)。警告:如果矩形包含在控件的子级中,这将产生副作用。
<Style x:Key="MyCustomScrollViewer" TargetType="{x:Type ScrollViewer}">
<Style.Resources>
<!-- 'BasedOn' can be omitted -->
<Style TargetType="Rectangle" BasedOn="{StaticResource {x:Type Rectangle}}">
<Setter Property="Visibility" Value="Hidden"/>
</Style>
</Style.Resources>
</Style>
可能有两个方面可以帮助你:
1)使用Snoop来探索应用程序的元素树,这可能有助于找到问题所在。
2)根据你启动控件的方式,你可以考虑从标准ListBox的副本开始。我发现当我从空或部分模板开始进行样式设置时,某些控件会出现问题。
希望这能帮到你。