我在 Silverlight 应用程序中启用了 2 点触控画布。我需要做的是,当一个人同时按住(按住并按住)两个画布时,屏幕上的值会增加一次。这应该发生在每个“双重”持有上。我可以使用正常事件来做到这一点,但尝试使用 RX 编写相同的东西,但我被卡住了。
目前我的代码看起来与单独的事件方法相同(使用全局变量和全局方法),但我认为必须有更好的方法来组合它。任何人都可以提出更好的方法吗?
var leftHold = Observable.FromEvent<TCanvas.HoldHandler, GestureHoldEventArgs>(
h => new TCanvas.HoldHandler(h),
h => HoldLeft.Hold += h,
h => HoldLeft.Hold += h
);
var rightHold = Observable.FromEvent<TCanvas.HoldHandler, GestureHoldEventArgs>(
h => new TCanvas.HoldHandler(h),
h => HoldRight.Hold += h,
h => HoldRight.Hold += h
);
var rightRelease = Observable.FromEvent<TCanvas.ReleaseHandler, EventArgs>(
h => new TCanvas.ReleaseHandler(e => { }),
h => HoldRight.Release += h,
h => HoldRight.Release += h
);
var leftRelease = Observable.FromEvent<TCanvas.ReleaseHandler, EventArgs>(
h => new TCanvas.ReleaseHandler(e => { }),
h => HoldLeft.Release += h,
h => HoldLeft.Release += h
);
leftHold.Subscribe(e =>
{
_leftHeld = true;
DoCheck();
});
rightHold.Subscribe(e =>
{
_rightHeld = true;
DoCheck();
});
rightRelease.Subscribe(e =>
{
_rightHeld = false;
DoCheck();
});
leftRelease.Subscribe(e =>
{
_leftHeld = false;
DoCheck();
});
非常基本的 DoCheck 函数看起来像这样......
private void DoCheck()
{
if (_rightHeld && _leftHeld)
{
MyTextBox.Text = (Convert.ToInt32(MyTextBox.Text) + 1).ToString() ;
}
}
希望你能看到我想要做什么。每个画布都有一个保持和释放事件,因此当 HoldLeft 和 HoldRight 都被保持时,会做一些事情,直到 HoldRight 或 HoldLeft 被释放。
任何帮助,将不胜感激。