【问题标题】:SL 4: ScrollViewer - RequestBringIntoViewSL 4:ScrollViewer - RequestBringIntoView
【发布时间】:2012-02-21 07:13:02
【问题描述】:

如何在 ScrollViewer 中找到处理 RequestBringIntoView 事件的组件?
它没有暴露在两个 ScrollBar 部分上(反正不是直接暴露)。
感谢您的任何指点...

更新: 相关:我可以获得 ScrollViewer 的 ScrollContentPresenter 部分吗?怎么样?
谢谢——

大图:
我们有一个包含在 ScrollViewer 中的大画布。在运行时,任意数量的用户控件(我将它们称为“Blob”)从 db 添加到画布中。它们的位置和内容来自数据库。用户可以通过单击来“选择”一个 blob,它的外观会发生变化以表明它已被选中。
如果用户使用滚动条将选定的 blob 移出视图,然后单击另一个 blob,则 Canvas 将滚动,因此先前未显示的 blob 再次出现在视图中。我认为这是由于某些对象引发了 RequestBringIntoView,而 ScrollViewer 正在处理它。
希望这是有道理的......

还有更多信息:
向 Scrollviewer 的滚动条 ValueChanged 事件添加了处理程序 (sb_ValueChanged)。这是通过鼠标单击导致滚动的堆栈:

OurControl.sb_ValueChanged() System.Windows.dll!System.Windows.Controls.Primitives.RangeBase.OnValueChanged() System.Windows.dll!System.Windows.Controls.Primitives.ScrollBar.OnValueChanged() System.Windows。 dll!System.Windows.Controls.Primitives.RangeBase.OnValuePropertyChanged() System.Windows.dll!System.Windows.DependencyObject.RaisePropertyChangeNotifications()
System.Windows.dll!System.Windows.DependencyObject.UpdateEffectiveValue() System.Windows.dll!System.Windows.DependencyObject.SetValueInternal() System.Windows.dll!System.Windows.DependencyObject.SetValue() System.Windows.dll!System.Windows.Controls.ScrollViewer.InvalidateScrollInfo() System.Windows.dll!System.Windows.Controls.ScrollContentPresenter.VerifyScrollData()
System.Windows.dll!System.Windows.Controls.ScrollContentPresenter.ArrangeOverride() System.Windows.dll!System.Windows.FrameworkElement.ArrangeOverride()

如果我能找出真正开始恶作剧的 FrameworkElement 是什么……

【问题讨论】:

    标签: silverlight-4.0 scrollviewer


    【解决方案1】:

    对不起...它似乎不像 WPF 中那样存在。 Check this link 方便的解决方案。

    更新:好的...为此,您可能需要遍历可视化树并且需要进行某种递归搜索。但是,假设您使用的是滚动查看器as seen here 的默认模板,您可以直接请求 ScrollContentPresenter,如下所示:

    var BorderChild = VisualTreeHelper.GetChild(MyScrollViewer, 0);
    var GridChild = VisualTreeHelper.GetChild(BorderChild, 0);
    var ScrollContentPresenterChild = VisualTreeHelper.GetChild(GridChild, 0);
    

    【讨论】:

    • 感谢您的链接,非常有趣。不幸的是,scrollviewer 意外滚动,所以我们要处理 RequestBringIntoView 事件来找出触发它的对象。
    • 哦...你已经有某种 RequestBringIntoView 工作了?
    • 我们没有对 RequestBringIntoView 做任何明确的事情。请参阅更新的 OP 以了解我们正在看到并试图解决的问题的叙述。感谢您的回复。
    • 唉,看起来 ScrollContentPresenter 并不能真正帮助我们......感谢您的回复和链接,我希望它在未来会有用。试图弄清楚到底是什么导致画布滚动非常令人沮丧......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2012-09-12
    • 2012-09-01
    相关资源
    最近更新 更多