Microsoft实际上是否提供了一个在WPF上“正常工作”的Rx / Silverlight Toolkit DragDrop版本?
据我所知,Rx DragDrop的东西只能在SL Toolkit中使用(不是WPF)。
SL Toolkit似乎意味着你可以在WPF(各种#defines)中使用它,但没有提供有关如何操作的更多信息。
如果我只想要DragDrop的东西,将它移植到WPF很容易,还是有100M系列的SL Toolkit可以用来骑行?
答案 0 :(得分:0)
我无法对Silverlight Toolkit发表过多评论,但我可以在Rx上发表评论。
Reactive Extensions (Rx)是一组通用的库,可以将各种“推送”集合(事件,异步操作等)“提升”到一流的,支持LINQ的组合框架中。它适用于Silverlight,XNA和javascript,但更重要的是.NET 4.0& .NET 3.5SP1因此可以与WPF一起使用。 (即使你不使用核心Rx代码,.NET 3.5SP1实现甚至可以反向移植大部分并行任务库,这非常有用。)
那就是说,因为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来提取并在您的应用中使用。
我希望有所帮助。