我有ScrollViewer
分层内容。 E.g:
<ScrollViewer>
<Grid>
<Child x:Name="Layer1" />
<Child x:Name="Layer2" />
<Child x:Name="Layer3" />
</Grid>
</ScrollViewer>
孩子们需要彼此重叠并且具有相同的大小。现在,我的Child
类实现了IScrollInfo。考虑上面的网格。我想选择一个孩子作为ScrollViewer
的所有者。因此,“Layer1”将更新滚动条,其他层将确保它们具有与滚动所有者相同的大小。这样的事情会很棒:
<Grid ScrollViewer.ScrollOwner="Layer1">
显然,Grid
是在这里使用的错误控件。 WPF是否支持上述开箱即用的功能?如果没有,那么实现这种行为的最佳方法是什么?
答案 0 :(得分:0)
没有什么特别优雅的想法。一个(稍微繁琐)选项是将Grid
子类化为实现IScrollInfo
并将所有此类功能委托给适当的子级,可能通过自定义网格上的属性设置。即沿着:
public IScrollInfo Scroller { get; set; }
bool IScrollInfo.CanHorizontallyScroll
{
get { return Scroller.CanHorizontallyScroll; }
set { Scroller.CanHorizontallyScroll = value; }
}
你需要注意这个重定向在ScrollViewer
使用之前就已经足够早地安排,这可能很痛苦。
另一个选项是注意ScrollViewer
具有ScrollInfo
受保护属性以指向IScrollInfo
子对象。你可以继承ScrollViewer
并设置它,虽然这看起来有点hacky - 我只是尝试过,并且不清楚何时必须设置它。
最后,您可以考虑存在一些设计问题,即您有3个兄弟姐妹,其中一个比其他人“更特殊” - 也许您真的应该有一个包含这些孩子的自定义面板来定义您的{{1}行为。
请注意,您使用的术语IScrollInfo
已经是ScrollOwner
中用于引用控制滚动查看器的概念。