我怎么得到的一个文本的重点在Silverlight?
-
02-07-2019 - |
题
在我Silverlight应用程序,我似乎不能带来重要的一个文本框控制。关于建议的各种职位,我已经设置的IsTabStop财产的真实和我用文本框。重点().虽然UserControl_Loaded事件被烧成,该文本框控制没有得到焦点。我已经包括我的非常简单的代码如下。我是什么丢失?谢谢。
页。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>
页。停靠。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();});
从Load事件起作用。
this.Focus(); 然后 Dispatcher.BeginInvoke(()=&gt; {tbNewText.Focus();});
我解决了放入控件构造函数的问题:
this.TargetTextBox.Loaded += (o, e) => { this.TargetTextBox.Focus(); };
你确定你没有真正关注焦点吗? Beta 2中存在一个已知错误,您可以获得焦点并能够键入,但不会得到插入符号或边框。解决方法是在调用Focus()之前调用文本框上的UpdateLayout()。
我会尝试在UserLoaded事件上添加一个DispatcherTimer,它在整个控件加载后的几毫秒内执行Focus方法;也许问题出在那里。
我还需要打电话
Deployment.Current.Dispatcher.BeginInvoke(()=&gt; myTextbox.Focus());
有趣的是,当我在TextBlock上单击鼠标时,会在事件处理程序中发生此调用,折叠TextBlock并使TextBox可见。如果我不通过调度员跟踪它.BeginInvoke它将无法获得焦点。-Mike
您设置焦点的代码是正确的,因为如果您添加一个调用相同代码的按钮,则它可以完美地运行:
<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">
对我来说似乎是个错误......
对于浏览器外应用程序, System.Windows.Browser.HtmlPage.Plugin.Focus();
不存在。
请参阅我的问题这里其他想法。
它适用于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;
}
我忘记了一件事......我还没有找到一种方法可以在页面上强制关注你的Silverlight应用程序(它可以在某些浏览器上运行而不在其他浏览器上运行)。
因此可能是Silverlight应用程序本身没有焦点。在我开始期待键盘输入以确保silverlight应用程序具有焦点之前,我通常欺骗用户点击按钮或类似的东西。
我也遇到了这个问题,但它已经出现了从一种不同的情况比我已经在这里找到答案了。
如果你有一个 BusyIndicator
控制正在显示与隐藏在所有在你看来,控制不会重点如果你有线喜欢
Dispatcher.BeginInvoke(() => { myControl.Focus();});
在装载活动。
相反,你会需要调用这一行代码 后 你BusyIndicator显示已经设置错误的。
我有一个相关的问题 在这里,, 以及一个解决方案的情况。
确实是一个令人讨厌的beheviour。我找到了一个简单直接的解决方案:
(VB代码)
Me.Focus()
Me.UpdateLayout()
Me.tbx_user_num.Focus()
Me.tbx_user_num.UpdateLayout()
至少根据我的项目,这里的每个元素都是必不可少的(VB2010 SL4 OutOfBrowser)。
感谢: http:// www .dotnetspark.com /千字节/ 1792设定的聚焦到文本框-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();
}
我的Silverlight版本是4。