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

标签 wpf scrollbar webbrowser-control frame scrollviewer

有谁知道在这样的框架上定义垂直滚动条的区别:

        <ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
            <Frame Name="Frame1"
                   ScrollViewer.CanContentScroll="True" />
        </ScrollViewer>

或者像这样:
        <ScrollViewer Grid.Row="2">
            <Frame Name="Frame1"
                   ScrollViewer.VerticalScrollBarVisibility="Auto"
                   ScrollViewer.CanContentScroll="True" />
        </ScrollViewer>

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

我将使用第一个选项,因为它满足我的需求,但如果我的设置不正确,我不想在路上感到惊讶。

谢谢!

最佳答案

当您使用 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>

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

所以这就是为什么这是你应该使用的
<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
        <Frame Name="Frame1" />
</ScrollViewer>

例如,当您使用 ListBox 尝试此操作时,结果会有所不同。

这是以下代码的结果:

enter image description here
<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>

那是因为这些附加属性现在会影响 ListBox 内的 ScrollViewer。而不是父 ScrollViewer正如您所料。

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

关于wpf - 在 WPF 框架上设置 ScrollViewer(用于垂直滚动)的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17054824/

相关文章:

c# - 如何验证您是否已连接到 C# 中的 MySQL 数据库?

html - Css min-width 不显示水平滚动条

html - 滚动条出现在我的 html 页面上

mysql - VB6 在模块中声明网页浏览器

c# - 如何在 MVVM 模式 WPF 应用程序中的 View 模型中设置 Crystal Report 中的数据源

wpf - 如何限制 <Border> 元素的宽度和高度等于其内部内容?

Cocoa:在应用程序启动时隐藏 TextView 的自定义滚动条

c# - 如何向 Windows Phone WebBrowser 添加多个 header ?

c# - 捕获和处理 Web 浏览器关闭事件

c# - WPF 中的 Visual Studio 样式撤消/重做按钮