【问题标题】:How to unfocus TextBox without focusing something else如何在不关注其他内容的情况下取消关注 TextBox
【发布时间】:2011-07-02 14:19:29
【问题描述】:

我相信,当我的应用程序启动时,没有任何焦点。至少它看起来像。我想将事件处理程序添加到GotFocus 事件,以便控件显示弹出窗口并失去焦点,因此可以再次显示弹出窗口,而无需手动移除焦点并将其重新设置。此外,不需要让我的文本框处于聚焦的视觉状态,因为它对用户没有用处(虽然这可以通过模板进行更改,但对这个问题的回答可以解决这两个问题)。

如果我最初的观察有误,并且某些东西总是聚焦在 Silverlight 中,我想知道要聚焦什么,这样看起来就好像没有聚焦(比如应用程序启动时)。如果有办法完全消除可见焦点 - 这种方法会更好。

编辑: 实际上,在我的情况下,它变成了一个在应用程序开始时聚焦时没有视觉风格差异的控件。我没有发现任何更聪明的事情要做,然后将其集中在我的 Unfocus() 相关方法中。为了更进一步,我可以建议点击 [enter] 键,看看会发生什么,在我的情况下,它也改变了聚焦控制状态,看起来好像没有重点。

注意:在 Silverlight 中没有“无焦点状态”

【问题讨论】:

    标签: .net wpf silverlight silverlight-4.0


    【解决方案1】:

    众所周知,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(),您就会看到发生了什么。

    【讨论】:

    • 我认为这是一个很好的课程。
    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    相关资源
    最近更新 更多