如何在不关注其他内容的情况下取消关注TextBox



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

如果我最初的观察有误,有些东西总是在银色的灯光下聚焦,我想知道该聚焦什么,这样看起来就好像什么都没有聚焦一样(比如当应用程序启动时(。如果有一种方法可以完全消除可见的焦点,这样的方法会更好。

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

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

众所周知,Silverlight中的Focus很难管理。

有很多控件可以有焦点,当它们有焦点时不会显示出视觉差异——这与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((,你就会看到发生了什么。

最新更新