轉帖|其它|編輯:郝浩|2011-04-14 13:34:40.000|閱讀 1135 次
概述:這個問題本來是在我實際的項目中遇到過的,但這其實是當初項目要求,要求一進入就要使得在用戶名那個文字框中聚焦,而不是再用鼠標去點擊獲得焦點,后來自己費了點時間解決了.本來我沒太注意就過去了,沒想到在QQ群里也有人問了一樣的問題,我想還是寫出來,這樣大家可以注意一下,可能以后有幫助.
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
這個問題本來是在我實際的項目中遇到過的,但這其實是當初項目要求,要求一進入就要使得在用戶名那個文字框中聚焦,而不是再用鼠標去點擊獲得焦點,后來自己費了點時間解決了.本來我沒太注意就過去了,沒想到在QQ群里也有人問了一樣的問題,我想還是寫出來,這樣大家可以注意一下,可能以后有幫助.
我用一個簡單的例子來說明一下吧.
目標:是我要使得在silveright項目中的一個TextBox在不做任何點擊操作的同時一開始獲得焦點.
xaml:
<Grid x:Name="LayoutRoot" Background="White">
<TextBox Name="myTextBox" Height="23" HorizontalAlignment="Left"
Margin="145,67,0,0" VerticalAlignment="Top" Width="120" />
</Grid>
C#:
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
myTextBox.Focus();
}
}
這里我們調用了Focus()這個方法想要使得這個TextBox獲得焦點.但我們運行項目看去,TextBox并沒有或得到焦點.
當時我得出的分析:1)可能是方法調用不成功,沒有聚焦,2)可能是這個TextBox聚焦了,但是經過運行焦點又聚焦到其他地方了.
于是我把后臺做了一下簡單的修改.
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(5000);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
if (myTextBox.Focus())
{
MessageBox.Show( "文本框聚焦成功!");
}
}
}
并沒有聚焦.
我用一個線程來一直看,結果還是彈出的提示信息都是"文本框聚焦成功!",這樣看來這個Focus()方法返回為true是成功的,而且即使是Focus到其他地方,我一直后來還是要聚焦到這個TextBox,應該也是成功的,但我們仍然是看到這文本框沒有聚焦,看來我當初上面兩個分析是錯的.
不知道大家后來發現沒有就是我們隨便在其他地方點擊一下,我們突然發現這個文本框聚焦了,這是怎么回事?
當我們理所當然的一直是認為我建立的是一個silverlight項目,想什么事情都是從silverlight本身的東西去想解決辦法,但其實我們去看,這個silverlight其實也是建立在一個aspx頁面中的,是一種插件形式存在的,可能插入過flash人就知道,放在頁面中的是以一個<object>標簽放入的,那么我們就可能會想到是不是當初只是聚焦到了頁面上面,而沒有聚焦到插件上,于是我們添加一項HtmlPage.Plugin.Focus(); 后面也改成
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
HtmlPage.Plugin.Focus();
myTextBox.Focus();
}
成功聚焦.
好了這樣我們就發現成功聚焦了,結論是:要想聚焦到silverlight中的控件一定要先聚焦到silverlight這個插件上,我們可以通過鼠標點擊到silverlight上使其聚焦.但當我們一開始沒有點擊就想使其中的控件獲得焦點可能就要用到我這個方法了.希望能給大家幫助.
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園