【问题标题】:ScrollViewer doesn't snap to windowScrollViewer 不捕捉到窗口
【发布时间】:2012-08-24 09:21:30
【问题描述】:

所以我正在尝试制作一个可以有水平或垂直滚动​​条的窗口,关键是网格的第一行应该被冻结并放置并且不能垂直滚动(很像 excel 中的冻结窗格)。水平滚动条应滚动两个窗格。我大部分时间都在工作,这是演示的代码子集。

<ScrollViewer HorizontalScrollBarVisibility="Auto"  VerticalScrollBarVisibility="Disabled">
    <Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>

        <TextBlock Text="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" />
        <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" >
            <TextBlock Text="test2">
                <Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" />
                <Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" />
                <Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" />
                <Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" /><Run Text="&#10;test2" />
            </TextBlock>
        </ScrollViewer>
    </Grid>
</ScrollViewer>

所以这几乎可以正常工作,屏幕可以水平滚动并滚动两个窗格,而垂直滚动只会滚动底部窗格(这是我想要的)。但是垂直滚动条不会出现在窗口的一侧,而是您必须一直滚动到右侧才能使用它。有什么办法可以让滚动条捕捉到窗口并垂直滚动而不使其也滚动顶部窗格?

【问题讨论】:

    标签: wpf xaml scrollviewer


    【解决方案1】:

    第一个 ScrollViewer 告诉 Grid:“您有任意多的空间,可以根据需要随意增长”。因此,内部的 ScrollViewer 永远不会被触发,因为它没有空间限制。

    尝试删除第一个 ScrollViewer。

    ---- 编辑 -------

    那么,两个“面板”将具有相同的宽度?好吧.. 将每个面板包装在自己的 ScrollViewer 中。顶部面板应该有它的水平 ScroolViewer “隐藏”,没有垂直的。底部应同时具有可见或“自动”。当底部发生变化时同步顶部的ScrollViewer(在代码中)(检查http://perezgb.com/2009/07/08/how-to-keep-two-scrollviewers-in-sync-in-wpf

    【讨论】:

    • 两个滚动条都会被触发,问题是要看到垂直滚动条,您必须一直向右滚动。删除第一个滚动查看器只会删除其中一个滚动查看器。
    • 第二个滚动条出现在右侧,因为第一个滚动条告诉“你有足够多的水平空间,只要你需要......等等”。您可以尝试用自己的 ScrollViewer 包装您的 TextBlock 并删除第一个。
    • 我明白了,我可以做些什么来获得我想要的行为吗?
    • 现在的问题是我只水平滚动文本框,我想水平滚动整个屏幕,但只垂直滚动网格的底部。
    • 那么,你需要屏幕底部的水平滚动条,但它应该对网格的第二行没有影响?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多