我是Caliburn.Micro的新手,所以希望有人可以在这里为我提供帮助:)。

我正在尝试在Windows 8应用程序中使用MessageBinder.SpecialValues,但无法正常工作。我添加了一个新的“$ pointerPercentage”,以了解鼠标在某个元素内(对于我的合成器应用程序中的音乐键盘而言)放置多远的百分比(在0.0到1.0之间 float )。目前其他所有功能都正常工作(因此,我相信Caliburn.Micro的连线正确)。

我已将以下内容添加到App.xaml.cs的Configure方法中:

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)]" />

我的ViewModel中的UpdateKeyboard方法确实被触发(我用调试器闯入了它),但是传入的参数始终为0.0f(而不是上面的SpecialValues代码中设置的1.0f)。

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

最佳答案

我发现了您的问题:问题出在此行的CM源中:

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

不确定是否认为源有问题-CM将所有SpecialValues key 按原样处理,但在与SpecialValues字典中的键进行比较之前,会将所有指定的操作消息特殊参数字符串转换为小写

解决方案是仅将SpecialValues参数 key 添加为小写!
protected override void Configure()
{
    container = new WinRTContainer();
    container.RegisterWinRTServices();

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

我已经看到您也将此内容发布在CM Codeplex网站上,我已经回答了-我认为这应该同时在dict的键和操作消息参数的键上进行,以防止这种情况的发生。 (可以在调用SpecialValues.Add方法以最大程度地减少代码影响时完成)-但这是CM开发人员需要注意的事情

关于c# - 在Windows 8应用中使用MessageBinder.SpecialValues无法正常工作吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13732657/

10-10 01:14