WPF:Scrollviewer 不将内容限制为窗口大小
Posted
技术标签:
【中文标题】WPF:Scrollviewer 不将内容限制为窗口大小【英文标题】:WPF: Scrollviewer not limiting content to size of window 【发布时间】:2022-01-16 19:56:54 【问题描述】:我有一个带有滚动查看器的树视图。当树视图变得充满树节点时,我希望滚动条出现。但无论树视图有多大,它都不会出现。树视图在窗口外生长,但不会限制在窗口内。
目前的结构是: MainWindow 包含一个显示页面的 Frame,该页面包含一个用户控件,该用户控件包含一个树视图。
用户控件设置为“拉伸”,但不是拉伸以适应其父级(限制空间并因此显示滚动条),而是拉伸以适应其所有子级(从而拉伸到屏幕外)。
我将如何继续将“自动”大小限制为它的父级,而不是让它显示所有子级?
How i would like it to look/work like
How it actually looks/works like
代码,有点无关紧要,我只是想知道我应该如何应用滚动视图:
主窗口:
<Frame Source="View/Pages/StartPage.xaml" x:Name="MainFrame" NavigationUIVisibility="Hidden"/>
</DockPanel>
主页:
<Grid>
<Frame Source="ParamFrameV.xaml" x:Name="pageFrame" HorizontalAlignment="Center" VerticalAlignment="Stretch"/>
ParamFrameV(用户控件):
<Grid>
<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Disabled" VerticalAlignment="Top" MaxHeight="I WANNA LIMIT HEIGHT SO THAT IT WONT GO OFF SCREEN" Width="283">
<TreeView ItemsSource="Binding Nodes" ItemContainerStyle="StaticResource TreeViewItemExpandedStyle">
//irrelevant code for this question
</TreeView>
</ScrollViewer>
【问题讨论】:
如果你设置或绑定Frame.Height
那么一切都应该工作。
您基本上要做的是隐藏树视图的原始滚动查看器并添加一个单独的滚动查看器来替换树视图。有两种方法可以在代码中执行此操作,因为纯 xaml 不支持绑定滚动索引或类似的 ***.com/questions/15151974/… 或为树视图项提供填充,从而产生滚动查看器一直移动到树视图之外的错觉
Rekshino) 绑定到什么?我不确定你是什么意思。 Denis)嗯,但我无法让滚动查看器在树视图上工作。即使在执行以下操作时:“这对我来说很好用:
<Grid>
<ScrollViewer Height="Binding ElementName=ParentGridName, Path=ActualHeight"" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Disabled" VerticalAlignment="Top" Width="283">
<TreeView Width="50" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<TreeViewItem Header="hi"></TreeViewItem>
<TreeViewItem Header="hi2"></TreeViewItem>
<TreeViewItem Header="hi3"></TreeViewItem>
<TreeViewItem Header="hi4"></TreeViewItem>
<TreeViewItem Header="hi5"></TreeViewItem>
<TreeViewItem Header="hi6"></TreeViewItem>
<TreeViewItem Header="hi7"></TreeViewItem>
<TreeViewItem Header="hi8"></TreeViewItem>
</TreeView>
</ScrollViewer>
</Grid>
注意: 在树视图本身上滚动不会滚动,因为它会捕获您的滚动事件,但我敢打赌有办法解决这个问题
【讨论】:
它适用于我,就像它适用于你一样,但这不是我想要的。这样高度限制为 50,因此如果里面的项目组合超过 50,那么滚动条就会出现。问题是我没有固定大小。如果我调整窗口大小,那么我希望能够看到更多的树视图。树视图需要将其高度限制为其父控件的大小。看看“它的实际外观/工作方式”,树视图的高度变得大于包含树视图的用户控件的高度。我需要限制高度才能达到我想要的效果。 我编辑了你可以考虑将heigt绑定到父容器的答案Binding ParentGridName, Path=ActualHeight
不起作用。它甚至不是一个有效的绑定表达式。使用 ElementName 或 RelativeSourceBinding。
@Clemens jup 你是对的,更新了
但是请注意,这样的绑定几乎从不需要,也不应该推荐。假设 ScrollViewer 的 Grid 父级已正确调整大小 - 通过布局 - 它也会调整其子元素的大小。然而,我们对该网格一无所知 - 例如。它是否是 UserControl 的 XAML 中的***元素,或者是否有其他父元素以某种方式干扰标准布局机制。以上是关于WPF:Scrollviewer 不将内容限制为窗口大小的主要内容,如果未能解决你的问题,请参考以下文章