SL 4:ScrollViewer - RequestBringIntoView

时间:2012-01-28 19:19:28

标签: silverlight-4.0 scrollviewer

如何在ScrollViewer中找到处理RequestBringIntoView事件的组件?
它不会暴露在两个ScrollBar部件上(不管是直接) 感谢您的任何指示...

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

更大的图片
我们在ScrollViewer中包含一个大型Canvas。在运行时,任意数量的UserControls(我将它们称为“Blob'”)将从db添加到画布中。他们的位置和内容来自db。用户可以选择'通过单击它来显示斑点,并且其外观会发生变化以指示它已被选中 如果用户使用滚动条将选定的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实际上是......

1 个答案:

答案 0 :(得分:0)

抱歉......它似乎不像WPF那样存在。 Check this link是一个方便的解决方案。

更新:好的...为此你可能需要走可视树,需要进行某种递归搜索。但是,假设您正在使用scrollviewer as seen here的默认模板,您可以直接向ScrollContentPresenter索取如下内容:

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