Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在不聚焦其他内容的情况下取消聚焦文本框_.net_Wpf_Silverlight_Silverlight 4.0 - Fatal编程技术网

.net 如何在不聚焦其他内容的情况下取消聚焦文本框

.net 如何在不聚焦其他内容的情况下取消聚焦文本框,.net,wpf,silverlight,silverlight-4.0,.net,Wpf,Silverlight,Silverlight 4.0,我相信,当我的应用程序启动时,没有什么是集中的。至少看起来是这样。我想将事件处理程序添加到GotFocus事件中,以便控件显示弹出窗口并失去焦点,从而可以再次显示弹出窗口,而无需手动移除焦点并将其设置回原位。此外,它不需要让我的文本框处于聚焦视觉状态,因为它的服务对用户没有任何用处(虽然这可以通过模板进行更改,但这个问题的答案解决了这两个问题) 如果我对我最初的观察有误,并且在silverlight中某些东西总是被聚焦,我想知道应该聚焦什么,这样看起来什么都没有被聚焦(比如当应用程序启动时)。如

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

如果我对我最初的观察有误,并且在silverlight中某些东西总是被聚焦,我想知道应该聚焦什么,这样看起来什么都没有被聚焦(比如当应用程序启动时)。如果有一种方法可以完全去除可见焦点,这种方法会更好

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


注意: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(),你就会看到发生了什么。

我认为这是一个很好的类。