Я хочу использовать присоединенное свойство для обработки события ScrollChanged моего ScrollViewer. В данный момент событие и логика обрабатываются в коде пользовательского интерфейса, что явно противоречит MVVM. Мне было интересно, есть ли у кого-нибудь идеи о том, как это сделать с прикрепленными свойствами? Единственные ресурсы, которые я нашел, кажутся очень длинными. Вот код, который у меня есть на данный момент:
XAML:
<ScrollViewer x:Name="MyScroller" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Visible" ScrollChanged="MyScroller_OnScrollChanged">
Отложенный код пользовательского интерфейса:
private void MyScroller_OnScrollChanged(object sender, ScrollChangedEventArgs e) {
var scrollViewer = sender as ScrollViewer;
if ((Math.Abs(e.ExtentHeightChange) < 0) && (Math.Abs(e.ExtentWidthChange) < 0)) return;
var xMousePositionOnScrollViewer = Mouse.GetPosition(scrollViewer).X;
var yMousePositionOnScrollViewer = Mouse.GetPosition(scrollViewer).Y;
var offsetX = e.HorizontalOffset + xMousePositionOnScrollViewer;
var offsetY = e.VerticalOffset + yMousePositionOnScrollViewer;
var oldExtentWidth = e.ExtentWidth - e.ExtentWidthChange;
var oldExtentHeight = e.ExtentHeight - e.ExtentHeightChange;
var relx = offsetX / oldExtentWidth;
var rely = offsetY / oldExtentHeight;
offsetX = Math.Max(relx * e.ExtentWidth - xMousePositionOnScrollViewer, 0);
offsetY = Math.Max(rely * e.ExtentHeight - yMousePositionOnScrollViewer, 0);
scrollViewer.ScrollToHorizontalOffset(offsetX);
scrollViewer.ScrollToVerticalOffset(offsetY);
}
(d as ScrollViewer).ScrollChanged += MyStaticScrolllChangedHandler
; - person 15ee8f99-57ff-4f92-890c-b56153   schedule 07.05.2019<i:Interaction.Behaviors> <attachedProperties:ScrollBehaviour> </attachedProperties:ScrollBehaviour> </i:Interaction.Behaviors>
в свой XAML. Спасибо за вашу помощь! - person danny10846   schedule 10.05.2019