问题 无法在WPF中完全设置ListBox / Scrollviewer的样式


我正在使用我们使用标准ControlTemplates创建的自定义Scrollbars,但是当我将它们应用到ListBox时,右下角有一个角落,我无法找到任何覆盖方式。

不幸的是,在我获得更多积分之前,我无法发布图片。但是我指的是当垂直和水平滚动条都出现的时候,右下方有一个空间,里面充满了一种灰白色的颜色,我无法消除


12825
2017-12-22 07:06


起源

您可以为模板添加代码......它可能有助于回答问题。 - Chris Nicol


答案:


这是我使用Blend为ScrollViewer获取的模板代码的一部分。我在右下角添加了一个矩形,并将填充设置为红色。您可以使用相同的方式设置样式,也可以使用Grid.RowSpan =“2”表示VerticalScrollBar(第一个)或Grid.ColumnSpan =“2”表示Horizo​​ntalScrollBar(第二个),以展开其中一个ScrollBar。

<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>

10
2017-12-22 15:08



它确实有效。但我碰巧认为执行性能会急剧下降。显示7000项(相对简单和轻量级项目)曾经需要1-2秒,但这种方法可能会长达15-19秒。我想知道渲染性能在哪里减慢。 - Haiyuan Li


有两件事可能会有所帮助:

1)使用 史努比 要探索应用程序的元素树,这可能有助于找到问题。

2)根据您启动控件的方式,您可以考虑从标准ListBox的副本开始。当我从空模板或部分模板开始样式时,我发现了某些控件的问题。

希望有所帮助


0
2017-12-22 07:12



我实际上是从标准列表框的副本开始的(使用Blend提取的模板)。 - DJScrib