2012-12-05 65 views
2

我是Caliburn.Micro的全新品牌,所以我希望有人能够帮助我在这里:)。在Windows 8应用程序中使用MessageBinder.SpecialValues不起作用?

我想在我的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)]" /> 

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

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

+0

您是否尝试在“Configure”中的匿名方法上粘贴断点?我自己并没有使用'SpecialValues',但是美元怎么样,我知道CM使用美元符号来表示一个特殊的价值,但是在配置它时需要它吗?让我看看CM源... – Charleh

回答

4

,我发现您的问题:问题出在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开发人员需要查看的东西

+0

太棒了!这绝对有效。谢谢 :)。 –

相关问题