【发布时间】:2015-08-12 12:08:29
【问题描述】:
让我开始:
- 我对 Rx 完全陌生
- 我没有练习 C#/Linq
- 我正在试验/学习,所以这个问题没有应用程序使用
我已经阅读了一些介绍性内容,包括 Matthew Podwysocki 的 Introduction to the Reactive Framework。
所以我从他的一个示例开始,并编写了一些 鼠标拖动/画线代码,如下所示:
var leftMouseDown = Observable.FromEventPattern<MouseEventArgs>(mainCanvas, "MouseLeftButtonDown");
var leftMouseUp = Observable.FromEventPattern<MouseButtonEventArgs>(mainCanvas, "MouseLeftButtonUp");
var mouseMove = Observable.FromEventPattern<MouseEventArgs>(mainCanvas, "MouseMove");
var mouseMoves = from mm in mouseMove
let location = mm.EventArgs.GetPosition(mainCanvas)
select new { location.X, location.Y };
var mouseDiffs = mouseMoves.Skip(1).Zip(mouseMoves, (l, r) => new { X1 = l.X, Y1 = l.Y, X2 = r.X, Y2 = r.Y });
var mouseDrag = from _ in leftMouseDown
from md in mouseDiffs.TakeUntil(leftMouseUp)
select md;
var mouseSub = mouseDrag.Subscribe(item =>
{
var line = new Line
{
Stroke = Brushes.LightSteelBlue,
X1 = item.X1,
X2 = item.X2,
Y1 = item.Y1,
Y2 = item.Y2,
StrokeThickness = 5
};
mainCanvas.Children.Add(line);
});
我的问题
基于该示例,我想尝试对鼠标移动做出反应,例如:
- 鼠标移动时,我将
someCanvas的背景色设置为绿色 - 当鼠标不动时,我将背景颜色设置为红色
鼠标左键不,只涉及鼠标移动。
这可能吗?
【问题讨论】:
-
不要错过精彩的introtorx.com。
标签: c# linq system.reactive