Я не могу комментировать слишком много в Silverlight Toolkit, но я могу прокомментировать Rx.
Reactive Extensions (Rx) - это набор библиотек общего назначения, позволяющий «поднимать» различные «push» коллекции (события, асинхронные операции и т. Д.) В первый класс с поддержкой LINQ. композиционные рамки. Он доступен для Silverlight, XNA и javascript, но что более важно для .NET 4.0 и .NET 3.5SP1, поэтому его можно использовать с WPF. (Реализация .NET 3.5SP1 даже переносит большую часть параллельной библиотеки задач, что может быть чрезвычайно полезно, даже если вы не используете основной код Rx.)
Тем не менее, поскольку Rx универсален, и если вы можете выполнять перетаскивание с использованием событий в WPF, то вы можете использовать Rx.
Запрос перетаскивания будет выглядеть примерно так:
var mouseDowns =
Observable.FromEvent<MouseButtonEventArgs>(element, "MouseDown");
var mouseMoves =
Observable.FromEvent<MouseEventArgs>(element, "MouseMove");
var mouseUps =
Observable.FromEvent<MouseButtonEventArgs>(element, "MouseUp");
var mouseDragPoints =
(from md in mouseDowns
select (from mm in mouseMoves.TakeUntil(mouseUps)
select mm.EventArgs.GetPosition(element))).Switch();
var mouseDragDeltas =
mouseDragPoints.Skip(1).Zip(mouseDragPoints, (p1, p0) =>
new Point(p1.X - p0.X, p1.Y - p0.Y));
Я быстро собрал этот код, не тестируя его, но он должен дать вам наблюдаемые дельты Point
от исходной начальной точки перетаскивания, и это будет сделано только во время операции перетаскивания. Я пытался сохранить код простым. Вам нужно изменить для ваших конкретных потребностей.
Если Silverlight Toolkit предоставляет что-то еще, то это будет лишь относительно тонкий слой вспомогательных методов, которые вы можете либо заново изобрести, либо использовать Reflector.NET для извлечения и использования в своем приложении.
Надеюсь, это поможет.