發問發問
 

已答覆Canvas KeyDown event

  • 2006年7月7日 下午 03:57A.Kahn 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     

    I can't able to get the keyword events of the canvas....

    Any help would be appreciated.

    Thanks in advance

    Cheers,

    G

解答

  • 2006年7月7日 下午 05:49viliescu版主使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆
    You can do that by setting Focusable="True" on the canvas and set the focus on the Canvas from the start (myCanvas.Focus() somewhere in the window's constructor or loaded event).
    The problem is that if another element receives focus during the application's lifetime, you will not receive the keyboard events on the canvas.

    Another way is to set the event handler up in the hierarchy (in the parent Window) - because of the tunneling/bubbling you will get the event no matter where the focus is in the window. I think in this case PreviewKeyDown is even better - you will get the event before any child will process it.

所有回覆

  • 2006年7月7日 下午 04:33Keith Boyd -MSFT 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    You need to have an element that can accept keyboard input within your
    Canvas for the KeyDown event to occur. I'm able to get the KeyDown event
    to fire by doing the following:


    private void CreateAndShowMainWindow()

    {

    Canvas myCanvas = new Canvas();

    myCanvas.KeyDown += new
    System.Windows.Input.KeyEventHandler(myCanvas_KeyDown);

    TextBox myTextBox = new TextBox();

    myTextBox.Width = 100;

    Canvas.SetTop(myTextBox, 300);

    Canvas.SetLeft(myTextBox, 25);

    myCanvas.Children.Add(myTextBox);

    }

    void myCanvas_KeyDown(object sender, System.Windows.Input.KeyEventArgs
    e)

    {

    MessageBox.Show("keydown event occurred");

    }

    If you just have UIElements that can't receive user input (like a
    TextBlock or other UIElement) and you try typing anywhere in the Canvas
    the event doesn't get raised.

    Good luck.
    -Keith

  • 2006年7月7日 下午 05:49viliescu版主使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆
    You can do that by setting Focusable="True" on the canvas and set the focus on the Canvas from the start (myCanvas.Focus() somewhere in the window's constructor or loaded event).
    The problem is that if another element receives focus during the application's lifetime, you will not receive the keyboard events on the canvas.

    Another way is to set the event handler up in the hierarchy (in the parent Window) - because of the tunneling/bubbling you will get the event no matter where the focus is in the window. I think in this case PreviewKeyDown is even better - you will get the event before any child will process it.
  • 2006年7月10日 上午 11:19A.Kahn 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    thanks guys :) your comments really help me to solved the problem.
    Cheers