首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在WPF框架上设置ScrollViewer (用于垂直滚动)的正确方式?

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

Stack Overflow用户
提问于 2013-06-12 06:21:00
回答 1查看 51.6K关注 0票数 12

有人知道在框架上定义垂直滚动条有什么区别吗:

代码语言:javascript
运行
复制
        <ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
            <Frame Name="Frame1"
                   ScrollViewer.CanContentScroll="True" />
        </ScrollViewer>

或者像这样:

代码语言:javascript
运行
复制
        <ScrollViewer Grid.Row="2">
            <Frame Name="Frame1"
                   ScrollViewer.VerticalScrollBarVisibility="Auto"
                   ScrollViewer.CanContentScroll="True" />
        </ScrollViewer>

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

我将使用第一个选项,因为它满足了我的需求,但我不想因为设置错误而感到惊讶。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-12 07:53:20

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

代码语言:javascript
运行
复制
<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

所以这就是为什么你应该使用

代码语言:javascript
运行
复制
<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
        <Frame Name="Frame1" />
</ScrollViewer>

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

这是以下代码的结果:

代码语言:javascript
运行
复制
<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,而不是父ScrollViewer。因此,我认为它不起作用,例如,在父DockPanel上生效的DockPanel.Dock

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17054824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档