2017-12-06 26 views
0

私は、コントロールがキャンバスにドロップされたときに、単純なキーを押すだけでそのコントロールを削除できるようにする必要があるという基本的なコードがあります。動的に追加されたコントロールに基本イベントを追加する

private void PlaceElementOnCavas(UIElement element, Point point) { 

    Canvas.SetLeft(element, point.X); 
    Canvas.SetTop(element, point.Y); 

    // Add the event to allow the user to press delete and remove the control 
    element.KeyDown += (sender, e) => { 
     if (e.Key == Key.Delete) { 
      this.designCanvas.Children.Remove(element); 
     } 
    }; 

    this.designCanvas.Children.Add(element); 

} 

私のコードはそうです。私のコントロールは、私が必要とするキャンバス上のポイントに正確に追加されます。

イベントハンドラは、ラムダを介して、または別のメソッドへの従来の呼び出しによって、何もしません。

私には何が欠けていますか?

+1

'element'は何ですか? 'KeyDown'イベントを受け取るためにフォーカスが必要で、' PreviewKeyDown'自体を処理するかもしれません。コンテナのイベントに登録したいのですか? – Sinatr

+0

@sinatrパラメータごとのUI要素です。デザイナーの表面にドラッグされたさまざまな基本コントロールにすることができます。 Aボタン、CheckBox、スライダーなど – Patrick

+0

'Delete'キーを押す前に、まずフォーカスを設定しましたか? * "イベントハンドラは何もしません" *あなたはどのように認識していますか?それは実行されないのですか(私の考え)、または子供は 'Remove()'の後にとどまりますか?ブレークポイントを設定します。 – Sinatr

答えて

0

次の手順では、キーボードの入力作業を行うのに十分でなければならない:

  • 設定Focusable="True"
  • MouseLeftButtonUpを処理し、マウスイベントをキャプチャするためにBackgroundを設定し、その中にKeyboard.Focus
  • を割り当てる
  • キーイベントを処理する

次に、要素をクリックしてフォーカスを合わせ、キーを使用します。代わりに、マウスを使用する予定がなく、タブを押してフォーカスを合わせたい場合は、Focusableとキーイベントだけが必要です。

<Grid x:Name="grid1" KeyDown="grid1_KeyDown" Focusable="True" MouseLeftButtonUp="grid1_MouseLeftButtonUp" Background="Transparent"> 
</Grid> 

フォーカス処理:

private void grid1_KeyDown(object sender, KeyEventArgs e) 
{ 
    // whatever you plan to do 
} 

private void grid1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    Keyboard.Focus(sender as IInputElement); 
} 
関連する問題