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