4

ChildWindowSilverlight 4(ベータ版)に簡単なポップアップがあります。

重要:これはブラウザ外のアプリケーションです。

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でこのような恐ろしいことをしなければなりませんでしたが、もうそうしなくてもいいと思っていました。

注:この同様の質問は、ブラウザーのみを対象としています。System.Windows.Browser.HtmlPage.Plugin.Focus();これは、機能しない呼び出しを示唆しており、実際には、Silverlight4ベータ版のブラウザー外で実行するとエラーが発生します。

4

6 に答える 6

3

私は SilverLight 4 (OOB) で同じ問題を抱えていましたが、タブ シーケンスによって、見えないコントロールにフォーカスが設定されることに気付きました。起こっているように見えるのは、フォーカスがコントロール(タブシーケンスの最初のもの)に設定されてから、何らかの理由でフォーカスがContentControl(name ="content")に移動することです。子ウィンドウ。

デフォルトでは、ContentControl には IsTabStop=true があります。参照してください.... ContentControl で IsTabStop を true に設定する必要があるのはなぜですか? アプリ内のすべての ContentControls に対して ContentControl.IsTabStop = false を設定するには、これを styles.xaml に追加します。

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

MainPage のタブ シーケンスでも同じ問題が発生します。このスタイルもこれを修正します。

于 2011-02-11T06:23:50.500 に答える
2

あなたは正しい軌道に乗っています。2 つのテスト ケースを処理する必要があり
ます。 1. ブラウザーでフォーカスを設定します。2. ブラウザーからフォーカスを外します。

Loaded イベントで示したコードは、ブラウザーから完全に正常に動作します。必要なのは、両方のケースを処理するようにリファクタリングすることだけです。

private void ChildWindow_Loaded(object sender, RoutedEventArgs e)
{
    if (App.current.IsRunningOutOfBrowser)
    {
        textBox1.Focus();
    }
    else
    {
        System.Windows.Browser.HtmlPage.Plugin.Focus();
        textBox1.Focus();
    }
}

それはあなたのためにトリックをするはずです。

于 2010-01-29T19:24:09.693 に答える
2

すべての投稿に感謝しますが、少し調査した後、以下のことがうまくいきます

シャマルで:

<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(); };
}
于 2011-12-02T09:27:45.623 に答える
1

私が使う:

protected override void OnOpened()
{
    base.OnOpened();
    textBox1.Focus();
}
于 2011-12-12T19:50:33.793 に答える
1

GotFocusにフォーカスを設定したいときに、IronPython で記述された Silverlight 3 アプリケーションの方法を使用する必要がありましたChildWindow

于 2010-04-30T16:48:55.037 に答える
0

すべての投稿に感謝しますが、私は次のようにして作業が完了したことを発見しました。

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

    }
于 2012-01-19T10:56:05.633 に答える