首页 新闻 赞助 找找看

Silverlight Grid如何捕获KeyDown事件

0
悬赏园豆:10 [已解决问题] 解决于 2010-11-04 18:42

我想在silverlight 页面中直接实现按下↑、↓进行翻页的功能,但是silverlight的Grid貌似捕获不到 KeyDown事件,请问大家知不知道为什么,有办法解决吗

 

王臣的主页 王臣 | 初学一级 | 园豆:0
提问于:2010-10-29 11:44
< >
分享
最佳答案
0

听说你有要做考试系统了?哈哈

 

另外,keydown的事件你可以试试不要写在Grid上,最外面的UserControl上应该是能触发的。

收获园豆:10
carlWolf | 菜鸟二级 |园豆:295 | 2010-10-30 21:12
其他回答(1)
0

可以通过扩展DataGrid即可实现,以下就是实现方法

首先重写控件DataGrid中的方法OnKeyDown来实现

 

1 public class BindableDataGrid : DataGrid
2 { //声明一个委托,当通过键盘输入时,触发这个事件
3 public delegate void OnKeyDownDefine(System.Windows.Input.KeyEventArgs e);
4 public OnKeyDownDefine OnKeyDowned;
5 protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e)
6 {
7 base.OnKeyDown(e);
8 if (OnKeyDowned != null)
9 {
10 OnKeyDowned(e);
11 }
12 }

13 }

 

通过上面的扩展,那么就可以直接用类BindableDataGrid,这个你一定知道,用BindableDataGrid就像用DataGrid一样。首先你需要在XAML中引用刚才的命名空间,如下面那样

xmlns:local="clr-namespace:HIEG2.Portal.ResourceApp"

然后就可以在XAML中写入以下代码

<local:BindableDataGrid x:Name="radGridView" Margin="0,0,0,0" Height="507" />

然后CS中的构造函数中写入以下代码,通过下面的代码就可以捕捉到你想要的效果了,后面的你可以根据自己的需要写程序了,你也可以自己再扩展。

radGridView.OnKeyDowned += new BindableDataGrid.OnKeyDownDefine(
(e)
=>
{
if (e.Key == Key.Down)
{

radDataPager.PageIndex++;
}
else if (e.Key == Key.Up)
{
radDataPager.PageIndex
--;
}
}
);

希望以上代码对你有用,我已经试过,可以实现你要的结果

天神一 | 园豆:845 (小虾三级) | 2010-10-29 12:57
先谢谢你了!可是我说的是Grid,而不是DataGrid啊。
支持(0) 反对(0) 王臣 | 园豆:0 (初学一级) | 2010-10-29 13:15
Grid翻页?怎么翻页?你说的应该是垂直滚动条吧
支持(0) 反对(0) 天神一 | 园豆:845 (小虾三级) | 2010-10-29 13:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册