我正在使用我们使用标准ControlTemplates创建的自定义Scrollbars,但是当我将它们应用到ListBox时,右下角有一个角落,我无法找到任何覆盖方式。
不幸的是,在我获得更多积分之前,我无法发布图片。但我指的是当垂直和水平滚动条都出现的时候,右下方有一个空间,里面充满了一种灰白色的颜色,我无法再去除
答案 0 :(得分:10)
这是我使用Blend为ScrollViewer获取的模板代码的一部分。我在右下角添加了一个矩形,并将填充设置为红色。您可以使用相同的方式设置样式,也可以使用Grid.RowSpan =“2”表示VerticalScrollBar(第一个)或Grid.ColumnSpan =“2”表示HorizontalScrollBar(第二个),以扩展其中一个ScrollBar以覆盖空间。 / p>
<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 :(得分:0)
可能会有所帮助的两件事:
1)使用Snoop探索应用程序的元素树,这可能有助于发现问题。
2)根据您启动控件的方式,您可以考虑从标准ListBox的副本开始。当我从空模板或部分模板开始样式时,我发现某些控件存在问题。
希望有所帮助
答案 2 :(得分:0)
还有另外两个解决方案。
1)矩形颜色是动态的,键为“ SystemColors.ControlBrushKey”。您可以用自定义样式或ScrollViewer控件(或其祖先之一)的资源覆盖此键。来源:this question on 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
的样式(与上面相同)并具有“隐藏”可见性。 警告:如果控件的后代中包含矩形,则会产生副作用。
<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>