代码之家  ›  专栏  ›  技术社区  ›  Simon_Weaver

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

  •  4
  • Simon_Weaver  · 技术社区  · 15 年前

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

    这是一个 浏览器外

    我想自动设置焦点在 TextBox 控件窗口何时打开。

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

        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中做这种可怕的事情,但我不想再这样做了。

    similar question System.Windows.Browser.HtmlPage.Plugin.Focus(); 这不起作用,事实上在浏览器外运行Silverlight4 beta时会出错。

    6 回复  |  直到 7 年前
        1
  •  3
  •   Community kfsone    7 年前

    我在Silverlight4(OOB)中遇到了同样的问题,我注意到制表符序列会将焦点设置为我看不到的控件。似乎发生的是焦点被设置到您的控件(选项卡序列中的第一个控件),然后由于某种原因,焦点移动到ContentControl(name=“content”),它(我认为)是子窗口的父窗口。

    看。。。。 Why would I want IsTabStop set to true on a ContentControl? 设置内容控制.IsTabStop=对于应用程序中的所有ContentControls,将其添加到样式.xaml.

       <Style  TargetType="ContentControl" >
             <Setter Property="IsTabStop" Value="false"/>
        </Style>
    

    主页上的选项卡序列也会出现同样的问题。这种风格也可以解决这个问题。

        2
  •  2
  •   mattduffield    15 年前

    你在正确的轨道上。您需要处理两个测试用例:
    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();
        }
    }
    

    那应该对你有好处。

        3
  •  2
  •   Stephen Gerard Darragh    13 年前

    在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(); };
    }
    
        4
  •  1
  •   Lukas Cenovsky    14 年前

    我不得不用你的 GotFocus ChildWindow .

        5
  •  1
  •   allen    13 年前

    protected override void OnOpened()
    {
        base.OnOpened();
        textBox1.Focus();
    }
    
        6
  •  0
  •   Khalid Rafique    13 年前

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            if (App.Current.IsRunningOutOfBrowser)
            {
                txtSalesOrderNo.Focus(); 
            }
            else
            {
                System.Windows.Browser.HtmlPage.Plugin.Focus();
                txtSalesOrderNo.Focus(); 
            }
    
        }