wpf radgridview如何获取GridViewRow的垂直偏移?

wpf radgridview如何获取GridViewRow的垂直偏移?,wpf,telerik,radgridview,Wpf,Telerik,Radgridview,我有目标GridViewRow的行索引,以及RadGridView中GridViewScrollViewer的ScrollChanged处理程序回调。我想得到目标行在视口中的垂直偏移,滚动时,若该行从顶部离开视口,则返回0;如果从底部离开,则返回RadGridView的实际高度;否则,获取一个值,该值和目标行和视口的顶部相同 下面是获取垂直偏移的函数,滚动条移动后将不正确: //const int indicator_size = 3; //RadGridView grid;

我有目标GridViewRow的行索引,以及RadGridView中GridViewScrollViewer的ScrollChanged处理程序回调。我想得到目标行在视口中的垂直偏移,滚动时,若该行从顶部离开视口,则返回0;如果从底部离开,则返回RadGridView的实际高度;否则,获取一个值,该值和目标行和视口的顶部相同

下面是获取垂直偏移的函数,滚动条移动后将不正确:



    //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;
        }
     };