Заменить клавишу Enter на клавишу Tab в формах Silverlight - PullRequest
0 голосов
/ 01 марта 2012

как мне изменить ключ ввода в формах silverlight на tab key.i использовать следующий код в winforms, но я не знаю, как я могу реализовать это в silverlight!

/// <summary>
/// Change Enter key To Tab Key
/// </summary>
/// <param name="msg"></param>
/// <param name="keyData"></param>
/// <returns></returns>
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (msg.Msg == 256 && keyData == Keys.Enter)
    {
        // Execute an alternative action: here we tabulate in order to focus on the next control in the formular             
        if (ActiveControl.ToString().Contains("System.Windows.Forms.Button") ||
            ActiveControl.ToString().Contains("DevComponents.DotNetBar.ButtonX"))

            return base.ProcessCmdKey(ref msg, keyData);

        SendKeys.Send("{TAB}");

        // return true to stop any further interpretation of this key action
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

Ответы [ 2 ]

2 голосов
/ 19 марта 2015

Немного поздно, но любой, кто просматривает эту ветку, может использовать клавишу TAB при нажатии клавиши ENTER с помощью AutomationFactory в Silverlight 5. Я сделал это, написав поведение, в котором вы слушаете KeyDown и передаете TAB Key. Приложение должно быть запущено в режиме OOB. Вы можете прикрепить это поведение к текстовому полю в Blend.

public class EnterKeyPropertyChangeBehaviour : Behavior<DependencyObject>
{
    public EnterKeyPropertyChangeBehaviour()
    {

    }

    protected override void OnAttached()
    {
        base.OnAttached();

        // Insert code that you would want run when the Behavior is attached to an object.
        var fe = AssociatedObject as FrameworkElement;
        if (fe != null) fe.KeyDown += fe_KeyDown;

    }

    void fe_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell"))
            {
                shell.SendKeys("{TAB}");
            }   

        }
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();

        // Insert code that you would want run when the Behavior is removed from an object.
        var fe = AssociatedObject as FrameworkElement;
        if (fe != null) fe.KeyDown -= fe_KeyDown;
    }

}
1 голос
/ 01 марта 2012

В Silverlight у нас есть событие KeyDown, по которому мы можем проверить, какая клавиша была нажата. Вы можете написать функцию в событии KeyDown и в этой проверке, если e.key == Enter, если клавиша Enter нажимает, чем фокусируется на желаемом текстовом поле, на которое вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...