wpf radgridview如何获取GridViewRow的垂直偏移?
我有目标GridViewRow的行索引,以及RadGridView中GridViewScrollViewer的ScrollChanged处理程序回调。我想得到目标行在视口中的垂直偏移,滚动时,若该行从顶部离开视口,则返回0;如果从底部离开,则返回RadGridView的实际高度;否则,获取一个值,该值和目标行和视口的顶部相同 下面是获取垂直偏移的函数,滚动条移动后将不正确:wpf radgridview如何获取GridViewRow的垂直偏移?,wpf,telerik,radgridview,Wpf,Telerik,Radgridview,我有目标GridViewRow的行索引,以及RadGridView中GridViewScrollViewer的ScrollChanged处理程序回调。我想得到目标行在视口中的垂直偏移,滚动时,若该行从顶部离开视口,则返回0;如果从底部离开,则返回RadGridView的实际高度;否则,获取一个值,该值和目标行和视口的顶部相同 下面是获取垂直偏移的函数,滚动条移动后将不正确: //const int indicator_size = 3; //RadGridView grid;
//const int indicator_size = 3;
//RadGridView grid;
Func rowIndicatorOffset = (rowIndex) =>
{
double offset = (rowIndex + 1.5) * this.grid.RowHeight;
if (offset > this.grid.ActualHeight)
{
return this.grid.ActualHeight - indicator_size;
}
return offset;
};
更改垂直滚动条偏移量时,我希望指示器(上图中的红色指示器)与目标行保持相同的Y位置:
//System.Windows.Controls.ScrollChangedEventArgs offsetValues (from ScrollChanged event)
double fixRatio = (this.grid.ActualHeight - this.offsetValues.VerticalOffset) / this.grid.ActualHeight;
double offset = (rowIndex + 1.5) * this.grid.RowHeight * fixRatio;
上面的代码显然没有预期的那么好,那么答案是什么呢
关于视口,我搞错了,下面的图表可能会解决这个问题
//const int indicator_size=3;
//RadGridView网格;
Func rowIndicatorofset=(rowIndex)=>
{
双目标偏移=(行索引+1.5)*this.grid.RowHeight;
双视口偏移=this.offsetValues.VerticalOffset;
双偏移=目标偏移-视口偏移;
如果(偏移量>此网格实际高度)
{
返回this.grid.ActualHeight-指示器大小;
}
否则如果(偏移量<0)
{
返回0;
}
其他的
{
返回偏移量;
}
};
//const int indicator_size = 3;
//RadGridView grid;
Func<int, double> rowIndicatorOffset = (rowIndex) =>
{
double targetOffset = (rowIndex + 1.5) * this.grid.RowHeight;
double viewportOffset = this.offsetValues.VerticalOffset;
double offset = targetOffset - viewportOffset;
if (offset > this.grid.ActualHeight)
{
return this.grid.ActualHeight - indicator_size;
}
else if (offset < 0)
{
return 0;
}
else
{
return offset;
}
};