在另一个ScrollViewer控件模板中使用ScrollViewer - 为什么它们是同步的

时间:2013-05-31 16:15:31

标签: wpf gridview scrollviewer

如果我替换了一个ScrollViewer控件模板,使其包含另一个滚动查看器,那么有些时候它们会一起滚动。

例如,GridView类在以下模板上有一个变体,可确保列标题始终与列表视图的内容对齐,即使用户向右滚动(在此示例中&# 34;列"是GridViewColumnCollection填充列)

<ScrollViewer HorizontalScrollBarVisibility="Visible">
    <ScrollViewer.Style>
        <Style TargetType="{x:Type ScrollViewer}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ScrollViewer}">
                        <DockPanel>
                            <ScrollViewer DockPanel.Dock="Top">
                                <GridViewHeaderRowPresenter Columns="{StaticResource Columns}" />
                            </ScrollViewer>
                            <ScrollBar DockPanel.Dock="Bottom" Name="PART_HorizontalScrollBar" Orientation="Horizontal"
                                        Minimum="0.0" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}"
                                        Value="{Binding Path=HorizontalOffset,RelativeSource={RelativeSource TemplatedParent},Mode=OneWay}"  />
                            <ScrollContentPresenter Name="PART_ScrollContentPresenter" Content="{TemplateBinding Content}" />
                        </DockPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ScrollViewer.Style>
    <GridViewHeaderRowPresenter Columns="{StaticResource Columns}" />
</ScrollViewer>

这是如何运作的?

Magic!

(我问我是因为我需要修改GridView模板并且我设法破坏了这项功能 - 我试图弄清楚如何修复它但找到它困难,因为我不明白为什么它首先起作用!)

0 个答案:

没有答案