如何在不关注其他内容的情况下解散TextBox

时间:2011-07-02 14:19:30

标签: .net wpf silverlight silverlight-4.0

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

如果我对我的初步观察有误,并且总是专注于Silverlight,我想知道要关注什么,所以看起来没有什么是专注的(比如应用程序启动时)。如果有办法完全消除可见焦点 - 这种方法会更好。

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

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

1 个答案:

答案 0 :(得分:5)

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