C# Focus()等函数和Focusable等属性不适用于silverlight,仅适用于.NET?

C# Focus()等函数和Focusable等属性不适用于silverlight,仅适用于.NET?,c#,silverlight,silverlight-5.0,xna-4.0,C#,Silverlight,Silverlight 5.0,Xna 4.0,简短版本:解决方案如下: 这似乎不起作用,因为像Focus这样的函数和像Focusable这样的属性对于silverlight是不存在的,显然只存在于.net中 背景/长版本:所以我一直在尝试让我的XNA游戏在silverlight上运行。移植是一场噩梦,但我还是设法做到了。目前我想使用ViewBox,这样我的游戏就和玩家浏览器一样大,而不是设定大小。当我尝试这样做时,它在视觉上起作用,但不可能向游戏发送任何键盘命令。我很确定这会妨碍我集中注意力。当我在谷歌上搜索如何给予关注时,它会给我类似这样

简短版本:解决方案如下:

这似乎不起作用,因为像Focus这样的函数和像Focusable这样的属性对于silverlight是不存在的,显然只存在于.net中

背景/长版本:所以我一直在尝试让我的XNA游戏在silverlight上运行。移植是一场噩梦,但我还是设法做到了。目前我想使用ViewBox,这样我的游戏就和玩家浏览器一样大,而不是设定大小。当我尝试这样做时,它在视觉上起作用,但不可能向游戏发送任何键盘命令。我很确定这会妨碍我集中注意力。当我在谷歌上搜索如何给予关注时,它会给我类似这样的链接,人们说要使用.focus这样的函数,而这些函数显然只存在于silverlight 5.NET上。例如,请点击此处: 它显示了.NET4.5版本。如果您在顶部将其更改为silverlight,则所有良好的功能和设置都将消失。我是不是遗漏了什么?如何在silverlight中访问这些类的.Net版本?如果不可能,为什么上面提到的所有答案都使用焦点等?

假设C

在silverlight页面上,选择从“编写代码”菜单创建的页面

添加以下内容:

partial void YourPage_Created() // this line should be autogenerated
{
this.FindControl("YourControl").ControlAvailable += YourFieldAvailable;
}

private void YourFieldAvailable(object sender, ControlAvailableArguments e)
{
((System.Windows.Controls.Control)e.Control).GotFocus += YourRoutine;
}

private void YourRoutine(object sender, System.Windows.RoutedEventArgs e)
{
// do your focus specific code in here
}
现在,您将拥有指定控件的自定义焦点事件。
希望这有帮助:

也许你看起来太匆忙了。再看一次,方法焦点可用于控件和所有派生类型。Focusable和IsFocused属性不可用,但您可以将它们实现为ExtensionMethods,并像使用它们一样使用它们……还有一个方法IsKeyboardFocusable,您可能可以使用,通过派生类型使用,对于尝试运行游戏文本框、日历等似乎没有用处。。。扩展方法到底是什么?我将如何实现它们?我将尝试修补automationpeer,您知道有这样的例子吗?谢谢SilverlightApplication的顶级元素是什么?承载您提到的ViewBox的那个。它不是源于控件还是用户控件?你可以从控件派生你自己的类型来托管你的游戏的视口。示例扩展方法用法:if myControl.IsFocused{…}和其他地方的定义:public static类MyControlExtensions{public static bool IsFocusedthis Control Control{return…FocusManager…magic…}谢谢你的帮助,这真的让我很沮丧。但这不只是为获得焦点添加一个事件处理程序吗?在我的帖子中,我可能不太清楚,我希望找到一种方法,使ViewBox的焦点主要是键盘焦点,而不是在它获得焦点后再执行操作。在这种情况下,请尝试:this.FindControlYourControl.focus,使用您希望为ViewBox提供焦点的方法。若您想让控件1获得焦点并将焦点传递给控件2,可以使用上面的代码在“YourRoutine”中使用this.FindControlYourControl.focus,这些代码在silverlight中似乎对我不起作用。因此,我尝试了.FindControl,甚至在网格控件对象中,它也没有这个功能。更糟糕的是,对于默认的viewbox和grid类,焦点函数似乎不存在。没关系,我发现了一个非常奇怪的解决方法,就是把我的绘图表面放在一个网格中,这个网格在一个视图框中。在默认情况下,网格看起来是可聚焦的,检索键盘输入并连接到drawingsurface游戏。