Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Silverlight 4浏览器外弹出窗口中设置文本框的焦点_Silverlight_Silverlight 4.0_Out Of Browser - Fatal编程技术网

如何在Silverlight 4浏览器外弹出窗口中设置文本框的焦点

如何在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

我在Silverlight4(测试版)中有一个简单的弹出窗口

重要提示:这是一个浏览器外应用程序

我想在窗口打开时自动设置
文本框
控件的焦点

我试过两种方法:

下面的代码似乎没有任何作用。我不认为控件在“加载”后可以聚焦

    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做到的。其他所有的“把戏”都没用。非常感谢。