2

私はCaliburn.Microを初めて使用するので、誰かがここで私を助けてくれることを願っています:)。

Windows 8 アプリで MessageBinder.SpecialValues を使用しようとしていますが、機能しません。新しい「$pointerPercentage」を追加して、マウスが要素内に配置されている距離のパーセンテージ (0.0 から 1.0 の間の浮動小数点数) を確認します (シンセサイザー アプリの音楽キーボードの場合)。他のすべては現在機能しています (したがって、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 ではありません)。

私は何を間違っていますか?どんな助けでも大歓迎です:)。

4

1 に答える 1

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 サイトにも投稿したのを見てきました.私はそこで答えました. (コードへの影響を最小限に抑えるために SpecialValues.Add メソッドが呼び出されたときに実行できます) - ただし、これは CM 開発者が検討することです。

于 2012-12-06T11:55:34.993 に答える