在Windows 8应用程序中使用MessageBinder.SpecialValues不工作?(U

2019-08-03 14:27发布

我是全新的,以Caliburn.Micro,所以我希望有人也许能帮助我在这里:)。

我想在我的Windows 8应用使用MessageBinder.SpecialValues,但我不能得到它的工作。 我加入一个新的“$ pointerPercentage”知道的鼠标多远定位在元素中(在我的合成应用程序的音乐键盘)(0.0和1.0之间浮动)的百分比。 其他的都是目前正在(所以我相信我有Caliburn.Micro有线正确)。

我已经添加下面我App.xaml.cs的配置方法:

protected override void Configure()
{
    container = new WinRTContainer();
    container.RegisterWinRTServices();

    MessageBinder.SpecialValues.Add("$pointerPercentage", ctx =>
    {
        return 1.0f;
    });
}

然后,我用它从一个Canvas元素内的PointerMoved事件:

<Canvas x:Name="keyCanvas" Background="#338B8BDC"
    cal:Message.Attach="[Event PointerMoved] = [Action UpdateKeyboard($pointerPercentage)]" />

在我的视图模型的UpdateKeyboard方法不被解雇(我闯了进去有一个调试器),但传递的参数始终是0.0F(如SpecialValues代码中设置上述不1.0F)。

我究竟做错了什么? 任何帮助,将不胜感激 :)。

Answer 1:

我发现您的问题:问题就出在这行CM来源:

else if (MessageBinder.SpecialValues.ContainsKey(parameterText.ToLower()) || char.IsNumber(parameterText[0]))

不知道是否它被认为与源问题- CM将所有SpecialValues键原样,但转换任何指定的操作消息特殊参数字符串比较的密钥之前小写SpecialValues词典

解决的办法是只需添加您的SpecialValues参数键小写!

protected override void Configure()
{
    container = new WinRTContainer();
    container.RegisterWinRTServices();

    MessageBinder.SpecialValues.Add("$pointerpercentage", ctx =>
    {
        return 1.0f;
    });
}

我见过你已经张贴这对CM的CodePlex网站了,我已经回答了那里 - 在我看来,这应该在字典都钥匙,和你的行动消息的密钥来完成PARAMS,以防止这种情况发生。 (这可能当SpecialValues.Add方法被调用,以尽量减少代码的影响来实现) - 但是这东西CM开发者看



文章来源: Using MessageBinder.SpecialValues in Windows 8 app not working?