今天遇到一个问题:
需要在点击红色框中的滚动条时,将窗体在最上层显示,点击datagrid的其它地方都能让窗口最上层显示,唯独滚动条不可以。
但是在silverlight不能获取到DataGrid的滚动条对象,这点很郁闷。按理说它是DataGrid的一部分,在DataGrid的控件范围内点击都能触发DataGrid的
鼠标点击事件,事实却让我很失望。
最后找到以下解决方法:
1.在DataGrid中查找滚动条,然后为它绑定事件
代码
private void FindScrollBar(DependencyObject obj, ref List<ScrollBar> scrollBars)
{
for (int i = VisualTreeHelper.GetChildrenCount(obj) - 1; i >= 0; i--)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is ScrollBar)
{
scrollBars.Add(child as ScrollBar);
}
else
{
FindScrollBar(child, ref scrollBars);
}
}
}
{
for (int i = VisualTreeHelper.GetChildrenCount(obj) - 1; i >= 0; i--)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is ScrollBar)
{
scrollBars.Add(child as ScrollBar);
}
else
{
FindScrollBar(child, ref scrollBars);
}
}
}
2.自定义一个类,并继承DataGrid
代码
public class MyDataGrid:DataGrid
{
public MyDataGrid()
{
}
public ScrollBar VerticalScrollbar()
{
return base.GetTemplateChild("VerticalScrollbar") as ScrollBar;
}
public ScrollBar HorizontalScrollbar()
{
return base.GetTemplateChild("HorizontalScrollbar") as ScrollBar;
}
}
{
public MyDataGrid()
{
}
public ScrollBar VerticalScrollbar()
{
return base.GetTemplateChild("VerticalScrollbar") as ScrollBar;
}
public ScrollBar HorizontalScrollbar()
{
return base.GetTemplateChild("HorizontalScrollbar") as ScrollBar;
}
}
获取到滚动条对象后,然后为其绑定事件,最终问题得解
可能还有其它更好的办法,希望大家不吝分享,谢谢