如何在Silverlight 4浏览器外弹出窗口中设置文本框的焦点
我在Silverlight4(测试版)中有一个简单的弹出窗口 重要提示:这是一个浏览器外应用程序 我想在窗口打开时自动设置如何在Silverlight 4浏览器外弹出窗口中设置文本框的焦点,silverlight,silverlight-4.0,out-of-browser,Silverlight,Silverlight 4.0,Out Of Browser,我在Silverlight4(测试版)中有一个简单的弹出窗口 重要提示:这是一个浏览器外应用程序 我想在窗口打开时自动设置文本框控件的焦点 我试过两种方法: 下面的代码似乎没有任何作用。我不认为控件在“加载”后可以聚焦 private void ChildWindow_Loaded(object sender, RoutedEventArgs e) { textBox1.Focus(); } 这是可行的,但很糟糕 private void C
文本框
控件的焦点
我试过两种方法:
下面的代码似乎没有任何作用。我不认为控件在“加载”后可以聚焦
private void ChildWindow_Loaded(object sender, RoutedEventArgs e)
{
textBox1.Focus();
}
这是可行的,但很糟糕
private void ChildWindow_GotFocus(object sender, RoutedEventArgs e)
{
if (_firstTime == true) {
textBox1.Focus();
_firstTime = false;
}
}
难道没有更好的办法吗?我总是不得不在WinForms中做这样可怕的事情,但我希望不再这样做了
注意:这仅适用于浏览器中的。它建议调用
System.Windows.Browser.HtmlPage.Plugin.Focus()
不起作用,事实上在浏览器外的Silverlight 4 beta上运行时会出现错误。您的思路是正确的。您需要处理两个测试用例:1.在浏览器中设置焦点。 2.在浏览器外设置焦点 在加载的事件中显示的代码在浏览器外可以正常工作。所有必要的是重构它以处理这两种情况:
private void ChildWindow_Loaded(object sender, RoutedEventArgs e)
{
if (App.current.IsRunningOutOfBrowser)
{
textBox1.Focus();
}
else
{
System.Windows.Browser.HtmlPage.Plugin.Focus();
textBox1.Focus();
}
}
这应该对你有帮助。当我想在
ChildWindow
中设置焦点时,我不得不使用你用IronPython编写的Silverlight 3应用程序的GotFocus
方式,我在Silverlight 4(OOB)中遇到了同样的问题,我注意到选项卡序列会将焦点设置为我看不到的控件。似乎正在发生的是焦点被设置到控件(选项卡序列中的第一个),然后由于某种原因焦点移动到ContentControl(name=“content”),它(我认为)是子窗口的父窗口
ContentControl默认为IsTabStop=true。
看见
要为应用程序中的所有ContentControl设置ContentControl.IsTabStop=false,请将其添加到styles.xaml中
<Style TargetType="ContentControl" >
<Setter Property="IsTabStop" Value="false"/>
</Style>
主页上的选项卡序列也会出现同样的问题。这种风格也可以解决这个问题。感谢所有的帖子,但在做了一些研究之后,下面的内容对我来说很有用 在Xamal中:
<TextBox VerticalAlignment="Center" HorizontalAlignment="Left" FontFamily="Arial" FontSize="12" Height="25" Width="200" Margin="38,50,0,0" Name="txtUserName" Text="{Binding LoginInfo.UserName,Mode=TwoWay, NotifyOnValidationError=True}" IsTabStop="True" TabIndex="1" ></TextBox>
// Initialiazing Main Part View Model
/// </summary>
/// <param name="mainPartViewModel"></param>
public ChildWindowLoginControl(MainPartViewModel mainPartViewModel)
{
InitializeComponent();
this.DataContext = mainPartViewModel;
System.Windows.Browser.HtmlPage.Plugin.Focus();
this.GotFocus += (s, e) => { txtUserName.Focus(); };
}
//初始化主零件视图模型
///
///
公共子窗口登录控件(MainPartViewModel MainPartViewModel)
{
初始化组件();
this.DataContext=mainPartViewModel;
System.Windows.Browser.HtmlPage.Plugin.Focus();
this.GotFocus+=(s,e)=>{txtUserName.Focus();};
}
我使用:
protected override void OnOpened()
{
base.OnOpened();
textBox1.Focus();
}
谢谢所有的帖子,但我已经通过以下方式找到了工作
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
if (App.Current.IsRunningOutOfBrowser)
{
txtSalesOrderNo.Focus();
}
else
{
System.Windows.Browser.HtmlPage.Plugin.Focus();
txtSalesOrderNo.Focus();
}
}
我还没有再次尝试此操作,但问题是它对于浏览器外的已加载事件不起作用。请记住,这是一个儿童窗口-不仅仅是一个“常规控件”+1非常感谢。这为我做到了(Silverlight 4应用程序)。这也是为我的ChildWindow做到的。其他所有的“把戏”都没用。非常感谢。