Silverlight에서 TextBox 초점을 어떻게 제공합니까?
-
02-07-2019 - |
문제
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;
}
나는 한 가지 잊어 버렸습니다 ... 나는 페이지에서 당신의 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입니다.