外部MIDIキーボードからのNoteOnおよびNoteOff MIDIイベントに応答するWPFのピアノキーボード用のXAMLコントロールを作成しようとしています。 Tom Lokovicのmidi-dot-netを使用して、ハードウェアによってトリガーされたNoteOnイベントとNoteOffイベントを発生させていますが、これらのイベントを取得してXAML KeyクラスのNoteOnイベントとNoteOffイベントを発生させる方法が必要です。ピアノ・キーボード・コントロールのユーザーがキーが押された音を再生できるように、オンのときにキーの色が変わり、イベントが登録される必要があります。XAMLでコントロールのイベントを発生させる
すべてのMidi.InputDeviceをキーボード上のすべての単一のキーに渡すことで、各InputDeviceのNoteOnイベントとNoteOffイベントをサブスクライブすることができます。次に、それぞれのNoteOnイベントとNoteOffイベントを発生させますが、問題これは、PianoKeyboardコントロール(Keysを保持するItemsControl)とそのネストされたKeyコントロールがすべて、midi-dot-netの実装と緊密に結合していることです。私がこれをやらなければならない場合、WPFでこれを行うより良い方法がコールスタックのmidi-dot-net higherへの依存を動かすべきであるように思えました。
私はここに完全に貼り付けるのにあまりにも多くのコードを持っていますが、読めるようになっています。私はPianoKeyboardのItemTemplateとして使用しているDataTemplateのサンプルをここに示します。
<DataTemplate x:Key="naturalKeyTemplate"> <!--NOTE: Background and Foreground Color assignment and changing is accounted for in the style.--> <local:Key Grid.Column="{Binding Converter={StaticResource keyToColumnNumberConverter}}" Grid.ColumnSpan="{Binding Converter={StaticResource keyToColumnSpanConverter}}" Grid.RowSpan="2" Style="{StaticResource naturalKeyStyle}" Note="{Binding Note}" IsHighlighted="{Binding IsHighlighted}"> <!--TODO: Find a way of raising the Key's NoteOn and NoteOff events from here.--> </local:Key> </DataTemplate>
基本的に私は何をされて求めている:行動に建てられたボタンの(例えばマウスクリック)、1が得るんどのようにそれがトリガーするとWPFのボタンをトリガするためにサポートされていない入力デバイスを与えられましたボタンの派生クラスに結合しないで
私はPianoKeyboardコントロールのDataContextを自分自身に設定する必要がないように、コードビハインドにロジックを置かないようにしようとしています(現在は他の理由でも排除しようとしていますが) 。もし私がコードのバインディングに依存しているのであれば、データコンテキストを何かに設定するためのコントロールのユーザが必要です。 – Sphynx
このコードはビューのコードビハインドには入りません。カスタムコントロールクラスに入ります。 – mm8
PianoKeyboardコントロールクラス? – Sphynx