我有一个树视图。现在,我想检测垂直滚动条是否可见。当我尝试使用
var visibility = this.ProjectTree.GetValue(ScrollViewer.VerticalScrollBarVisibilityProperty)
(哪里这个。项目树是树视图)我总是自动获得可见性。
如何执行此操作以检测滚动条是否有效可见?
谢谢。
ComputedVerticalScrollBarVisibility
属性。但为此,您首先需要在 TreeView
的模板中找到ScrollViewer
。为此,您可以使用以下扩展方法:
public static IEnumerable<DependencyObject> GetDescendants(this DependencyObject obj)
{
foreach (var child in obj.GetChildren())
{
yield return child;
foreach (var descendant in child.GetDescendants())
{
yield return descendant;
}
}
}
像这样使用它:
var scrollViewer = ProjectTree.GetDescendants().OfType<ScrollViewer>().First();
var visibility = scrollViewer.ComputedVerticalScrollBarVisibility;
ComputedVerticalScrollBarVisibility 而不是 VerticalScrollBarVisibility
VerticalScrollBarVisibility设置或获取行为,而ComputedVerticalScrollBarVisibility为您提供实际状态。
http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.computedverticalscrollbarvisibility(v=vs.110).aspx
您不能像在代码示例中那样访问此属性,请参阅 Thomas Levesque 对该:)的回答
我发现的最简单的方法是简单地订阅 ScrollChanged
事件,该事件是附加属性ScrollViewer
的一部分,例如:
<TreeView ScrollViewer.ScrollChanged="TreeView_OnScrollChanged">
</TreeView>
代码隐藏:
private void TreeView_OnScrollChanged(object sender, ScrollChangedEventArgs e)
{
if (e.OriginalSource is ScrollViewer sv)
{
Debug.WriteLine(sv.ComputedVerticalScrollBarVisibility);
}
}
出于某种原因,IntelliSense没有向我展示该事件,但它有效。