I am writing my custom WPF ItemsControl to display a list of item. The items are shown embedded inside a ScrollViewer:
// How to scroll the uiElement to the mouse position?
uiElement.BringIntoView();
REF: https://msdn.microsoft.com/en-us/library/ms598110.aspx
UPDATE: (thanks to @jmbpiano) Note, it does not bring the control exactly to the current mouse cursor position. It just brings the control to a visible position, where the Operator will be able to click it with the mouse (which in 99% of cases is all someone who finds this question is likely to need).
Try this below code :
private void ScrollViewerFromVSTree(DependencyObject element, double pos)
{
try
{
int totalElementcount = VisualTreeHelper.GetChildrenCount(element);
for (int counter = 0; counter < totalElementcount; counter++)
{
DependencyObject ele = VisualTreeHelper.GetChild(element, counter);
if (ele.GetType().Name == "ScrollViewer")
{
ScrollViewer scrollViewer = ele as ScrollViewer;
if (pos > "YourAssumption") // for me it is 610
{
scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + 45);
}
else if (pos < "YourAssumption") //for me it is 40
{
scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - 45);
}
break;
}
ScrollViewerFromVSTree(VisualTreeHelper.GetChild(element, counter), pos);
}
}
catch (Exception)
{
}
}
Use UIElement.TranslatePoint() to calculate what position you want to scroll to
Use ScrollViewer.ScrollToVerticalOffset() to do the scrolling
Something like the following:
var sv = (ScrollViewer)Template.FindName("PART_MyScrollViewer", this); // If you do not already have a reference to it somewhere.
var ip = (ItemsPresenter)sv.Content;
var point = item.TranslatePoint(new Point() - (Vector)e.GetPosition(sv), ip);
sv.ScrollToVerticalOffset(point.Y + (item.ActualHeight / 2));