.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(),你就会看到发生了什么。我认为这是一个很好的类。