在WPF框架上设置ScrollViewer(用于垂直滚动)的正确方法?

JDL*_*JDL 12 wpf scrollbar frame webbrowser-control scrollviewer

有没有人知道在框架上定义垂直滚动条之间的区别如下:

        <ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
            <Frame Name="Frame1"
                   ScrollViewer.CanContentScroll="True" />
        </ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

或者像这样:

        <ScrollViewer Grid.Row="2">
            <Frame Name="Frame1"
                   ScrollViewer.VerticalScrollBarVisibility="Auto"
                   ScrollViewer.CanContentScroll="True" />
        </ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

此框架嵌套在WebBrowser控件中,并以第一种方式设置它正确显示垂直滚动条,并且仅在需要滚动(自动)时才可见.当我以第二种方式设置垂直滚动条时,即使它不需要滚动(可见)也始终可见.

我将使用第一个选项,因为它符合我的需要,但如果我设置错误,我不想在路上感到惊讶.

谢谢!

Kap*_*íko 28

当您使用ScrollViewer.VerticalScrollBarVisibilityScrollViewer.HorizontalScrollBarVisibility附加属性时,它对Frame没有影响.

<ScrollViewer Margin="225.667,-4,0,296.939" HorizontalAlignment="Left" Width="221.667">
        <Frame Content="Frame" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Hidden" Source="UserControl2.xaml" Background="#FFDE5454"/>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我使用了两个ScrollViewer.VerticalScrollBarVisibilityScrollViewer.HorizontalScrollBarVisibility附加属性.该代码的结果与您期望的完全相反.没有HorizontalScrollBar可见......你仍然可以看到VerticalScrollBar.

所以这就是你应该使用的原因

<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
        <Frame Name="Frame1" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

当您使用ListBox尝试此操作时,结果将不同.

这是以下代码的结果:

在此输入图像描述

<ScrollViewer Margin="225.667,0,0,12.761" Height="280.178" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="221.667">
        <ListBox ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Visible" Background="Orange" ItemsSource="{Binding Collection}" DisplayMemberPath="Property1" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

那是因为那些附加属性现在会影响ScrollViewer,ListBox而不是ScrollViewer您期望的父级.

因此,从这个小实验中我假设ScrollViewer.VerticalScrollBarVisibility附加属性适用于您希望能够影响ScrollViewerControl的模板中存在哪些而不是父模板的情况ScrollViewer.所以我认为它不起作用,因为DockPanel.Dock它对父母生效DockPanel.