C# 在Windows 8应用程序中使用MessageBinder.SpecialValue不起作用?
我是Caliburn.Micro的新手,所以我希望有人能在这里帮助我:) 我正在尝试在我的Windows 8应用程序中使用MessageBinder.SpecialValue,但无法使其正常工作。我添加了一个新的“$pointerPercentage”,以了解鼠标在元素中的位置百分比(浮动范围在0.0和1.0之间)(对于我的合成器应用程序中的音乐键盘)。其他一切都在正常工作(所以我相信我有Caliburn.Micro-wired) 我已将以下内容添加到我的App.xaml.cs的Configure方法中:C# 在Windows 8应用程序中使用MessageBinder.SpecialValue不起作用?,c#,mvvm,windows-8,caliburn.micro,C#,Mvvm,Windows 8,Caliburn.micro,我是Caliburn.Micro的新手,所以我希望有人能在这里帮助我:) 我正在尝试在我的Windows 8应用程序中使用MessageBinder.SpecialValue,但无法使其正常工作。我添加了一个新的“$pointerPercentage”,以了解鼠标在元素中的位置百分比(浮动范围在0.0和1.0之间)(对于我的合成器应用程序中的音乐键盘)。其他一切都在正常工作(所以我相信我有Caliburn.Micro-wired) 我已将以下内容添加到我的App.xaml.cs的Configur
protected override void Configure()
{
container = new WinRTContainer();
container.RegisterWinRTServices();
MessageBinder.SpecialValues.Add("$pointerPercentage", ctx =>
{
return 1.0f;
});
}
然后我在画布元素中的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
键按原样处理,但在与SpecialValues
字典中的键进行比较之前,将任何指定的操作消息特殊参数字符串转换为小写
解决方案是只需将特殊值
参数键添加为小写
protected override void Configure()
{
container = new WinRTContainer();
container.RegisterWinRTServices();
MessageBinder.SpecialValues.Add("$pointerpercentage", ctx =>
{
return 1.0f;
});
}
我看到你也在CM codeplex网站上发布了这篇文章,我已经回答了——在我看来,这应该在dict中的键和动作消息参数中的键上进行,以防止这种情况发生。(当调用SpecialValues.Add方法以最小化代码影响时,可以这样做)-但这是CM开发人员需要考虑的问题我发现了您的问题:问题在于这一行的CM源代码:
else if (MessageBinder.SpecialValues.ContainsKey(parameterText.ToLower()) || char.IsNumber(parameterText[0]))
不确定是否认为源代码有问题-CM将所有SpecialValues
键按原样处理,但在与SpecialValues
字典中的键进行比较之前,将任何指定的操作消息特殊参数字符串转换为小写
解决方案是只需将特殊值
参数键添加为小写
protected override void Configure()
{
container = new WinRTContainer();
container.RegisterWinRTServices();
MessageBinder.SpecialValues.Add("$pointerpercentage", ctx =>
{
return 1.0f;
});
}
我看到你也在CM codeplex网站上发布了这篇文章,我已经回答了——在我看来,这应该在dict中的键和动作消息参数中的键上进行,以防止这种情况发生。(当调用SpecialValues.Add方法以最小化代码影响时,可以这样做)-但这是CM开发人员需要考虑的问题您是否尝试在
Configure
中的匿名方法上粘贴断点?我自己没有使用过特殊值
但是美元呢,我知道CM使用美元符号表示特殊值,但在配置一个特殊值时是否需要它?让我看看CM源代码……您是否尝试在Configure
中的匿名方法上粘贴断点?我自己没有使用过特殊值
但是美元呢,我知道CM使用美元符号表示特殊值,但在配置一个特殊值时是否需要它?让我看看CM源代码。。。