一千萬個為什麽

搜索

如何在不關註其他內容的情況下解除TextBox的聚焦

我相信,當我的申請開始時,沒有什麽是重點。至少它看起來像。我想向 GotFocus 事件添加事件處理程序,以便控件顯示彈出窗口並失去焦點,因此可以再次顯示彈出窗口,而無需手動刪除焦點並將其設置回來。此外,我不需要將我的文本框置於聚焦視覺狀態,因為它的服務對用戶沒有用處(雖然這可以通過模板進行更改但是這個問題的答案可以解決這兩個問題)。

如果我對我的初步觀察有誤,並且總是專註於Silverlight,我想知道要關註什麽,所以看起來沒有什麽是專註的(比如應用程序啟動時)。如果有辦法完全消除可見焦點 - 這種方法會更好。

EDIT: Actually in my case it turned out a control that had no visualstyle difference when focused was focused at the start of application. I didn't find anything smarter to do then to focus it in my Unfocus() related method.. To go a bit further I can recommend hitting [enter] key and see what happens, in my case it also changed focused control state, that looked like its unfocused.

註意:在Silverlight中沒有“沒有焦點的狀態”

最佳答案

眾所周知,專註於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(),你就會看到發生了什麽。

轉載註明原文: 如何在不關註其他內容的情況下解除TextBox的聚焦