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

Val*_*zub 4 .net silverlight wpf silverlight-4.0

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

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

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

注意:在Silverlight中没有"没有焦点的状态"

Cra*_*rer 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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,在你的应用程序的某个地方,只需调用WatchWhatsGotFocus.StartWatching(),你就会看到发生了什么.