我相信当我的应用程序启动时,没有什么是重点。至少它看起来像。我想向GotFocus
事件添加事件处理程序,因此控件显示弹出窗口并失去焦点,因此弹出窗口可以再次显示而无需手动删除焦点并将其设置回来。此外,我不需要让我的文本框处于专注的可视状态,因为它的服务对用户没有用(虽然这可以通过模板更改但是这个问题的答案可以解决这两个问题)。
如果我对我的初步观察有误,并且总是专注于Silverlight,我想知道要关注什么,所以看起来没有什么是专注的(比如应用程序启动时)。如果有办法完全消除可见焦点 - 这种方法会更好。
编辑:实际上在我的情况下,当焦点集中在应用程序的开始时,结果是一个没有视觉风格差异的控件。我没有发现任何更聪明的事情,然后将它集中在我的Unfocus()相关方法中。为了更进一步,我可以建议按[enter]键,看看会发生什么,在我的情况下它也改变了聚焦控制状态,看起来像是没有重点。
注意:在Silverlight中没有“无焦点状态”
答案 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(),您就会看到发生了什么。