2011-08-08 6 views
1

これは非常に単純なようですが、カスタムコントロールに追加する動作に関するWeb上には何も見つかりません。コントロールの既定のボタンの検出

私のカスタムコントロールは、選択肢のリストを持つテキストボックスです。ユーザによって入力されたテキストがリストの一部でない場合、ユーザが正しい選択肢を選択できるようにするリストがポップアップ表示される。

場合によっては、カスタムコントロールが追加されたコンテナにデフォルトのボタンが存在することがあります。そうであれば、決定キーが押されたとき、テキストが間違っているならば、ポップアップが表示されていなければならない。入力時にデフォルトのボタンがない場合、テキストが間違っていても何も起こりません。

この動作を作成するには、コンテナ内のdefaultbuttonの存在を検出できる必要があります。また、cutomコントロールのc#コード内で行う必要があります。

説明が十分明確であることを希望します。 ありがとうございます

答えて

0

私はカスタムコントロールから持っていた他のコントロールは、私はこのように行くことを選んだかを知ることができなかったので:

は私が親を持つ FrameworkElement.Parent を使用して最初の親を見つけるために、再帰関数を作った、私が取ることができますそれが含むすべてのコントロールを見てください。 ボタンを見たらすぐに IsDefaultを確認しなければなりませんでした。 については、 VisualTreeHelper GetChildrenCount(DependencyObject obj_Parent)GetChild(DependencyObject obj_Parent, int childIndex)を使用しました。再帰性がもう一度...

実行するコードが増えても、うまく動作します。

1

MVVMのアプローチとコマンドパターンの実装について考えましたか?ビューモデルが選択肢を知っている限り、デフォルトのボタンをコマンドにバインドすることができます。コマンドCanExecute handlerがfalseを返す限り、すなわち、適切な選択肢が入力/選択されていない限り、ボタンは無効にされ、ユーザがenterを押すことに応答しない。

+0

私は間違って説明したと思います。一方の面にはデフォルトのボタンがあり、そこには存在しないかもしれませんし、他のこともしています。反対側では、適切な値を必要とするカスタムコントロールがあり、ユーザーがそれを残しておくと、正しい値が選択されます。ユーザーがコントロールを離れて間違った値を入力しようとすると、リストが表示されます。これらの行動はあまり関連していません。要点は、デフォルトのボタンが存在するときに入力時にテキストが間違っているときにリストを起動することです。デフォルトのボタンがない場合、リストは効果がないので、入力時には表示されません。 – Fjodr

関連する問題