关于 Silverlight 焦点问题





5.00/5 (6投票s)
Silverlight 焦点问题
作为开发者或设计师,让用户的数据输入更简单是我们的工作。在这个过程中,最常用的技术之一就是将焦点赋予一个控件。因为当用户导航到页面时,他们可以在不点击页面上的任何控件的情况下就开始数据输入。这种技术也适用于 Silverlight 应用程序。
如果我们在页面上点击某个地方,第二个
希望这有帮助...
问题演示
让我们在 Silverlight 应用程序中演示焦点技术。首先,我们在一个stackpanel
中添加 2 个 textbox
控件,然后将焦点赋予第二个 textbox
控件。<Stackpanel>
<TextBox Width="208" x:name="txtOne" Margin="0,10,0,0"/>
<textbox Width="208" x:name="txtTwo" Margin="0,10,0,0"/>
</Stackpanel>
代码 - 后台
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
txtTwo.Focus();
}
当我们运行我们的 Silverlight 应用程序时,我们会看到一个意外的行为。 
textbox
会像预期的那样获得焦点。但是为什么我们需要点击?这似乎是一个不必要的动作。造成这种行为的确切原因非常明显。因为我们的 Silverlight 插件没有焦点。我们需要通过点击页面来赋予插件焦点。在此过程之后,Silverlight 才能像预期的那样运行。但是我们如何解决这个问题? 解决方案 实际上,我们有两种不同的解决方案来解决这个问题。第一种是使用 JavaScript 将焦点赋予 Silverlight 插件。另一种是使用 Silverlight 执行相同的操作。 第一种解决方案 我们可以使用如下 JavaScript 代码将焦点赋予 Silverlight 插件:var SlElement = document.getElementById('silverlightControlHost');
if (SlElement)
SlElement.focus();
第二种解决方案 在这个解决方案中,我们将使用 System.Windows.Browser
命名空间中的 HtmlPage
类型。如你所知,我们可以使用这种类型进行一些 HTML DOM 操作。在此,我们将使用 HtmlPage
的 Plugin
属性的 static Focus
方法。 最终代码 - 后台 public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
System.Windows.Browser.HtmlPage.Plugin.Focus();
txtTwo.Focus();
}
当我们运行这个应用程序时,我们可以看到预期的行为如下: 