今天遇到一个问题:
需要在点击红色框中的滚动条时,将窗体在最上层显示,点击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;
}
}
获取到滚动条对象后,然后为其绑定事件,最终问题得解
可能还有其它更好的办法,希望大家不吝分享,谢谢