32

私の Silverlight アプリケーションでは、TextBox コントロールにフォーカスを移動できないようです。さまざまな投稿の推奨に従って、IsTabStop プロパティを True に設定し、TextBox.Focus() を使用しています。UserControl_Loaded イベントは発生していますが、TextBox コントロールにフォーカスがありません。以下に非常に単純なコードを含めました。私は何が欠けていますか?ありがとう。

Page.xaml

<UserControl x:Class="TextboxFocusTest.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Loaded="UserControl_Loaded" 
    Width="400" Height="300">

    <Grid x:Name="LayoutRoot" Background="White">        
        <StackPanel Width="150" VerticalAlignment="Center">            
            <TextBox x:Name="RegularTextBox" IsTabStop="True" />    
        </StackPanel>        
    </Grid>
</UserControl>

Page.xaml.cs

using System.Windows;
using System.Windows.Controls;

namespace PasswordTextboxTest
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            RegularTextBox.Focus();
        }
    }
}
4

15 に答える 15

41

これは silverlight.net で見つけたもので、RegularTextBox.Focus() を呼び出す前に System.Windows.Browser.HtmlPage.Plugin.Focus() への呼び出しを追加することで機能させることができました。

   private void UserControl_Loaded(object sender, RoutedEventArgs e)
   {        
      System.Windows.Browser.HtmlPage.Plugin.Focus();
      RegularTextBox.Focus();
   }
于 2008-09-24T19:03:58.307 に答える
23
Plugin.Focus(); 

私のために働いていませんでした。

呼び出し

 Dispatcher.BeginInvoke(() => { tbNewText.Focus();});

Loadイベントから機能しました。

于 2010-04-14T15:09:03.387 に答える
10

おかげで Santiago Palladino Dispatcher は完璧に機能しました。私がやっていることは次のとおりです。

this.Focus(); 次に Dispatcher.BeginInvoke(() => { tbNewText.Focus();});

于 2010-01-27T18:16:15.977 に答える
3

コントロールコンストラクターの配置を解決しました:

this.TargetTextBox.Loaded += (o, e) => { this.TargetTextBox.Focus(); };
于 2012-10-16T10:27:31.727 に答える
2

あなたは本当に集中していないのですか?ベータ 2 には既知のバグがあり、フォーカスを取得して入力できますが、キャレットまたは境界線を取得できません。回避策は、Focus() を呼び出す直前に、テキスト ボックスで UpdateLayout() を呼び出すことです。

于 2008-09-24T02:05:12.170 に答える
2

コントロール全体がロードされてから数ミリ秒後に Focus メソッドを実行する UserLoaded イベントに DispatcherTimer を追加してみます。多分問題はそこにあります。

于 2008-09-24T14:01:16.600 に答える
2

私も電話する必要がありました

Deployment.Current.Dispatcher.BeginInvoke(() => myTextbox.Focus());

興味深いことに、TextBlock をマウスクリックし、TextBlock を折りたたんで TextBox を表示すると、イベント ハンドラー内でこの呼び出しが発生します。私がdispatcher.BeginInvokeでフォローしないと、フォーカスが得られません。

-マイク

于 2010-10-08T20:53:51.627 に答える
1

ブラウザ外のアプリの場合、System.Windows.Browser.HtmlPage.Plugin.Focus();は存在しません。

他のアイデアについては、ここで私の質問を参照してください。

于 2009-12-12T09:38:46.047 に答える
1

同じコードを呼び出すボタンを追加すると、完全に機能するため、フォーカスを設定するコードは正しいです。

<StackPanel Width="150" VerticalAlignment="Center">
    <TextBox x:Name="RegularTextBox" IsTabStop="True" />
    <Button Click="UserControl_Loaded">
        <TextBlock Text="Test"/>
    </Button>
</StackPanel>

したがって、これはある種のユーザー操作を必要とする Focus() と関係があると思います。UserControl の MouseMove イベントでは動作しませんでしたが、KeyDown イベントを配置してフォーカスを設定することはできました (ただし、テンプレートはフォーカスされたテンプレートに更新されません)。

Width="400" Height="300" Loaded="UserControl_Loaded" KeyDown="UserControl_KeyDown">

私にはバグのように思えます....

于 2008-09-24T00:47:33.637 に答える
1

SL4 と IE7 と Firefox 3.6.12 で動作します。

(私にとって)作業に焦点を合わせた最後の欠落した「ピース」は、.TabIndexプロパティを設定していました

        System.Windows.Browser.HtmlPage.Plugin.Focus();
        txtUserName.IsTabStop = true;
        txtPassword.IsTabStop = true;

        if (txtUserName.Text.Trim().Length != 0)
        {
            txtPassword.UpdateLayout();
            txtPassword.Focus();
            txtPassword.TabIndex = 0;
        }
        else
        {
            txtUserName.UpdateLayout();
            txtUserName.Focus();
            txtUserName.TabIndex = 0;
        }
于 2010-12-16T10:05:28.443 に答える
0

1 つ忘れていました...ページ上の Silverlight アプリケーションに確実にフォーカスを当てる方法が見つかりませんでした (一部のブラウザーでは機能し、他のブラウザーでは機能しません)。

そのため、Silverlight アプリ自体にフォーカスがない可能性があります。私は通常、Silverlight アプリにフォーカスがあることを確認するためにキーボード入力を期待し始める前に、ユーザーをだましてボタンなどをクリックさせます。

于 2008-09-24T03:03:13.950 に答える
0

私もこの問題に遭遇しましたが、ここで既に回答されているものとは別のケースから発生していました。

BusyIndicatorビュー中にコントロールが表示されたり非表示になったりしている場合、次のような行があるとコントロールはフォーカスされません

Dispatcher.BeginInvoke(() => { myControl.Focus();}); 

ロードイベントで。

代わりに、 BusyIndi​​cator 表示が false に設定されたで、そのコード行を呼び出す必要があります。

関連する質問hereと、このシナリオの解決策があります。

于 2012-01-13T21:31:52.033 に答える
0

実に迷惑な行為です。シンプルで簡単な解決策を見つけました:

(VBコード)

    Me.Focus()
    Me.UpdateLayout()

    Me.tbx_user_num.Focus()
    Me.tbx_user_num.UpdateLayout()

少なくとも私のプロジェクト(VB2010 SL4 OutOfBrowser)によれば、ここの各要素は不可欠です。

クレジット: http://www.dotnetspark.com/kb/1792-set-focus-to-textbox-silverlight-3.aspx

于 2012-08-25T12:18:49.340 に答える