Как расфокусировать TextBox, не фокусируя что-то еще - PullRequest
4 голосов
/ 02 июля 2011

Я считаю, что когда мое приложение запускается, ничего не фокусируетсяПо крайней мере, это выглядит так.Я хотел бы добавить обработчик событий к событию GotFocus, чтобы элемент управления отображал всплывающее окно и терял фокус, чтобы всплывающее окно можно было снова отобразить, не удаляя фокус вручную и не возвращая его обратно.Также не требуется, чтобы мое текстовое поле находилось в фокусированном визуальном состоянии, потому что его показ не нужен пользователю (хотя это может быть изменено шаблоном, но ответ на этот вопрос решает обе проблемы).

Если я ошибаюсь с моимПервоначальное наблюдение и что-то всегда фокусируется в серебряном свете. Я хотел бы знать, на что фокусироваться, чтобы было похоже, что ничего не сфокусировано (например, когда приложение запускается).Если есть способ полностью удалить видимый фокус - такой подход будет лучше.

РЕДАКТИРОВАТЬ: На самом деле в моем случае это был элемент управления, который не имел различий в визуальном стиле, когда фокус был сфокусирован наначало приложения.Я не нашел ничего более умного, чтобы сделать это, чтобы сфокусировать его в своем методе Unfocus (). Чтобы пойти немного дальше, я могу порекомендовать нажать клавишу [enter] и посмотреть, что произойдет, в моем случае это также изменило фокусное состояние управления,это выглядело как его не сфокусировано.

Обратите внимание: в Silverlight нет "состояния без фокусировки"

1 Ответ

5 голосов
/ 21 июля 2011

Фокусом в Silverlight, как известно, сложно управлять.

Существует множество элементов управления, которые могут иметь фокус, которые не показывают визуальной разницы, когда они имеют фокус - очень отличается от WinForms.

Мне показалось полезным следующий класс, полезный в некоторых моих приложениях Silverlight, чтобы попытаться выяснить проблемы фокусировки:

public static class WatchWhatsGotFocus
{
    private static DispatcherTimer t;

    public static void StartWatching()
    {
        t = new DispatcherTimer();
        t.Interval = TimeSpan.FromMilliseconds(500);
        t.Tick += t_Tick;
        t.Start();
    }

    public static void StopWatching()
    {
        if (t != null)
        {
            t.Stop();
            t = null;
        }
    }

    static void t_Tick(object sender, EventArgs e)
    {
        var element = FocusManager.GetFocusedElement();            
        if (element != null)
            Debug.WriteLine("Focused element: {0}", element.ToString());
        else
        {
            Debug.WriteLine("No focused element");
        }
    }
}

Итак, где-то в вашем приложении просто вызовите WatchWhatsGotFocus.StartWatching (), и вы увидите, что происходит.

...