65.9K
CodeProject 正在变化。 阅读更多。
Home

关于 Silverlight 焦点问题

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2011年2月20日

CPOL

1分钟阅读

viewsIcon

15855

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 操作。在此,我们将使用 HtmlPagePlugin 属性的 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();
} 
当我们运行这个应用程序时,我们可以看到预期的行为如下: 希望这有帮助...
© . All rights reserved.