实例讲解Silverlight 初始控件如何获得焦点

这个问题本来是在我实际的项目中遇到过的,但这其实是当初项目要求,要求一进入就要使得在用户名那个文字框中聚焦,而不是再用鼠标去点击获得焦点,后来自己费了点时间解决了.本来我没太注意就过去了,没想到在QQ群里也有人问了一样的问题,我想还是写出来,这样大家可以注意一下,可能以后有帮助.

  我用一个简单的例子来说明一下吧.

  目标:是我要使得在silveright项目中的一个TextBox在不做任何点击操作的同时一开始获得焦点.

xaml:


1 <Grid x:Name="LayoutRoot" Background="White">
2 <TextBox Name="myTextBox" Height="23" HorizontalAlignment="Left"
3 Margin="145,67,0,0" VerticalAlignment="Top" Width="120" />
4 </Grid>

C#:


 1 public partial class MainPage : UserControl
2 {
3 public MainPage()
4 {
5 InitializeComponent();
6 this.Loaded += new RoutedEventHandler(MainPage_Loaded);
7 }
8
9 void MainPage_Loaded(object sender, RoutedEventArgs e)
10 {
11 myTextBox.Focus();
12 }
13 }

这里我们调用了Focus()这个方法想要使得这个TextBox获得焦点.但我们运行项目看去,TextBox并没有或得到焦点.

  当时我得出的分析:1)可能是方法调用不成功,没有聚焦,2)可能是这个TextBox聚焦了,但是经过运行焦点又聚焦到其他地方了.

  于是我把后台做了一下简单的修改.


 1 public partial class MainPage : UserControl
2 {
3 public MainPage()
4 {
5 InitializeComponent();
6 this.Loaded += new RoutedEventHandler(MainPage_Loaded);
7 }
8
9 void MainPage_Loaded(object sender, RoutedEventArgs e)
10 {
11 DispatcherTimer timer = new DispatcherTimer();
12 timer.Interval = TimeSpan.FromMilliseconds(5000);
13 timer.Tick += new EventHandler(timer_Tick);
14 timer.Start();
15 }
16
17 void timer_Tick(object sender, EventArgs e)
18 {
19 if (myTextBox.Focus())
20 {
21 MessageBox.Show( "文本框聚焦成功!");
22 }
23 }
24 }

并没有聚焦.

  我用一个线程来一直看,结果还是弹出的提示信息都是"文本框聚焦成功!",这样看来这个Focus()方法返回为true是成功的,而且即使是Focus到其他地方,我一直后来还是要聚焦到这个TextBox,应该也是成功的,但我们仍然是看到这文本框没有聚焦,看来我当初上面两个分析是错的.

  不知道大家后来发现没有就是我们随便在其他地方点击一下,我们突然发现这个文本框聚焦了,这是怎么回事?

    
当我们理所当然的一直是认为我建立的是一个silverlight项目,想什么事情都是从silverlight本身的东西去想解决办法,但其实我们去看,这个silverlight其实也是建立在一个aspx页面中的,是一种插件形式存在的,可能插入过flash人就知道,放在页面中的是以一个<object>标签放入的,那么我们就可能会想到是不是当初只是聚焦到了页面上面,而没有聚焦到插件上,于是我们添加一项HtmlPage.Plugin.Focus();
后面也改成


 1 public MainPage()
2 {
3 InitializeComponent();
4 this.Loaded += new RoutedEventHandler(MainPage_Loaded);
5 }
6
7 void MainPage_Loaded(object sender, RoutedEventArgs e)
8 {
9 HtmlPage.Plugin.Focus();
10 myTextBox.Focus();
11 }

成功聚焦.

  好了这样我们就发现成功聚焦了,结论是:要想聚焦到silverlight中的控件一定要先聚焦到silverlight这个插件上,我们可以通过鼠标点击到silverlight上使其聚焦.但当我们一开始没有点击就想使其中的控件获得焦点可能就要用到我这个方法了.希望能给大家帮助.

实例讲解Silverlight 初始控件如何获得焦点,布布扣,bubuko.com

时间: 2024-08-11 13:41:39

实例讲解Silverlight 初始控件如何获得焦点的相关文章

javascript实现silverlight pivotViewer控件

一时无事,就用js实现了一个silverlight pivotViewer控件来练手. 实现效果: silverlight PivotViewer说明地址:https://msdn.microsoft.com/zh-cn/library/system.windows.controls.pivot.pivotviewer(v=vs.95).aspx 提前上代码:pivotViewer 主要分了几个类来实现: PivotViewer:主控件,负责设置属性,组合控件,绑定数据.也是调用的入口 Pivo

Silverlight 图表控件 Visifire 常用属性

首要介绍 Visifire 常用属性的设置,用来生成不合样式的图例 设置Chart的属 //设置title的值 // 创建一个题目标对象 Title title = new Title(); // 设置题目标名称 title.Text = titleText; title.Padding = new Thickness(0, 10, 5, 0); // 向图标添加题目 chart.Titles.Add(title); //是否显示3D结果 chart.View3D = view3D; //图表数

C# 委托实例(跨窗体操作控件)

原文地址 http://blog.csdn.net/bdstjk/article/details/7004035 FORM1(一个名为“打开form2”的button控件) FORM2(一个名为“改变form1颜色“的button控件) 启动时,FORM1中点击button控件“打开form2””使FORM2显示出来. 点击FORM2中的“改变form1颜色”后,Form1中颜色改变. 完整代码 1 using System; 2 using System.Collections.Generic

silverlight visifire控件图表制作——silverlight 后台方法页面事件

1.返回事件 (1.返回silverlight页面,2.返回web页面) private void button_ClickBack(object sender, RoutedEventArgs e)        { 1.返回silverlight页面: this.Content = new BeginControlChart(sTNameClick, strReportDate, false);//增加个参数表名 2.返回web页面 HtmlWindow html = HtmlPage.Wi

silverlight visifire控件图表制作——silverlight 后台方法ControlChart.xaml.cs

一.构造方法ControlChart 1.前台页面控件赋值 //时间下拉框赋值,下拉框赋选定值                for (int ii = DateTime.Today.Year; ii >= 1980; ii--)                {                    string item = string.Format("{0}年", ii.ToString());                    this.dateYear.Items

silverlight visifire控件图表制作——silverlight 静态页面xaml

一.silverlight 静态页面 1. 时间控件:DatePicker ,添加引用: xmlns:sdk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls", 触发事件:SelectedDateChanged: 2.文本:TextBlock : 3.下拉框:ComboBox,触发事件:SelectionChanged : 4.按钮:Button ,触发事件:Click: 5.图表画布:Gr

silverlight visifire控件图表制作——silverlight 后台方法打印

一.后台方法 1.添加引用:using System.Windows.Printing; 2.全局变量://定义图片和文本打印变量  PrintDocument printImage; 3.构造方法体里: //图片打印对象              printImage = new PrintDocument();            //图片打印事件处理              printImage.PrintPage += new EventHandler<PrintPageEventA

silverlight visifire控件图表制作——silverlight 后台方法画图

1.调用wcf 获取信息 private void svc_GetSingleChartDataCompleted(object sender, GetSingleChartDataCompletedEventArgs e) { ObservableCollection<ListItem> lBaseOilBar = e.Result; CreateChart(this.gridVisifire, lBaseOilBar); } 2.构造图表 ,根据解析xml获得的ListItem 画图 pu

WPF设置控件获取键盘焦点时的样式FocusVisualStyle

控件获取焦点除了用鼠标外,可以通过键盘来获取,比如Tab键或者方向键等,需要设置控件获取键盘焦点时的样式,可以通过设置FrameworkElemnt.FocusVisualStyle属性, 因为几乎所有常用的控件都继承了FrameworkElement,所以绝大部分控件都拥有该属性 // Summary: // Gets or sets a property that enables customization of appearance, effects, // or other style