문제

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();
        }
    }
}
도움이 되었습니까?

해결책

나는 이것을 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();
   }

다른 팁

Plugin.Focus(); 

나를 위해 일하지 않았습니다.

부름

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

로드 이벤트에서 작동했습니다.

Santiago Palladino Dispatcher에게 감사합니다. 내가하는 일은 다음과 같습니다.

this.focus (); 그런 다음 dispatcher.begininvoke (() => {tbnewtext.focus ();});

제어 생성자를 넣었습니다.

this.TargetTextBox.Loaded += (o, e) => { this.TargetTextBox.Focus(); };

당신은 실제로 집중하지 않는다고 확신합니까? 베타 2에는 알려진 버그가 집중되어 입력 할 수 있지만 간병이나 테두리를 얻지 못할 것입니다. 해결 방법은 Focus ()를 호출하기 직전에 TextBox에서 UpdatElayout ()를 호출하는 것입니다.

전체 컨트롤이로드 된 후 몇 밀리 초에 초점 방법을 실행하는 사용자로드 이벤트에 Dispatchertimer를 추가하려고합니다. 어쩌면 문제가있을 수 있습니다.

나는 또한 전화해야했다

deployment.current.dispatcher.begininvoke (() => mytextbox.focus ());

흥미롭게 도이 호출은 텍스트 블록을 mouseclick 할 때 이벤트 핸들러 내부에서 발생합니다. 텍스트 블록을 무너 뜨리고 텍스트 상자를 보이게합니다. 디스패처에 의해 따르지 않으면 BeginInvoke에 초점을 맞출 수 없습니다.

-마이크

동일한 코드를 호출하는 버튼을 추가하면 완벽하게 작동하기 때문에 초점을 설정하도록 코드가 올바릅니다.

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

그래서 나는 이것이 어떤 종류의 사용자 상호 작용이 필요한 Focus ()와 관련이 있다고 가정합니다. USERCONTROL에서 MousEmove 이벤트에서 작업 할 수는 없었지만 Focus Works를 설정하기 위해 키 다운 이벤트를 작성했습니다 (템플릿이 집중된 템플릿으로 업데이트되지는 않지만).

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

나에게 버그처럼 보인다 ....

브라우저 외부 앱의 경우 System.Windows.Browser.HtmlPage.Plugin.Focus(); 존재하지 않습니다.

보다 여기 내 질문 다른 아이디어를 위해.

SL4와 IE7 및 Firefox 3.6.12에서 나를 위해 작동합니다.

(나를 위해)에 초점을 맞춘 최종 누락 된 "조각".

        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;
        }

내 프로필은 @jim bg의 댓글 대답 하지만 저에게 효과가있는 것은 RichTextBox와 그 핸들러 추가 내부의로드 된 이벤트에 대한 핸들러를 추가하는 것이 었습니다.

System.Windows.Browser.HtmlPage.Plugin.Focus();
<YourTextBox>.UpdateLayout()
<YourTextBox>.Focus();

그러나 IE와 FF에서만 작동했습니다. Chrome과 Safari에서 작동하려면 바닥으로 스크롤하십시오. 이것

나는 한 가지 잊어 버렸습니다 ... 나는 페이지에서 당신의 Silverlight 애플리케이션에 집중할 수있는 방법을 찾지 못했습니다 (다른 브라우저에서 작동하지 않고 일부 브라우저에서 작동합니다).

따라서 Silverlight 앱 자체에는 초점이 맞지 않을 수 있습니다. 나는 일반적으로 Keyb

나는 또한이 문제를 해결했지만 이미 여기에서 대답 한 것과는 다른 경우에서 발생했습니다.

당신이있는 경우 BusyIndicator 당신의 관점에서 제어가 전혀 표시되고 숨겨져 있으면, 당신이 다음과 같은 선이 있으면 컨트롤이 초점을 맞추지 않습니다.

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

로드 이벤트에서.

대신 해당 코드 라인을 호출해야합니다. ~ 후에 바쁜 인디케이터 디스플레이가 거짓으로 설정되었습니다.

관련 질문이 있습니다 여기, 이 시나리오에 대한 솔루션뿐만 아니라.

실제로 성가신 beeviour. 간단한 간단한 솔루션을 찾았습니다.

(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-textbox-silverlight-3.aspx

위의 답변 중 어느 것도 나에게 직접 작동하지 않았다. 내가 한 일은 MainPage () 생성자 에이 이벤트를 추가했다는 것이다.

this.Loaded += new RoutedEventHandler(MainPage_Loaded);

다음과 같이 처리했습니다.

   void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        System.Windows.Browser.HtmlPage.Plugin.Focus();
        RegularTextBox.Focus();
    }

내 실버 라이트 버전은 4입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top