C# TransformToVisual值在pivot事件后更改

C# TransformToVisual值在pivot事件后更改,c#,silverlight,windows-phone-7,pivot,C#,Silverlight,Windows Phone 7,Pivot,我用的是c#,Silverlight,WP7 我的应用程序中有一个数据透视,在每次LoadedPivotItem事件之后,我想查看UI树以查看每个项目在屏幕上的位置。具体来说,我对边距值感兴趣,边距值是屏幕左侧的x偏移量 这是我的密码: GeneralTransform gt = myUIElement.TransformToVisual(Application.Current.RootVisual); double x = ((MatrixTransform)gt).Matrix.Offset

我用的是c#,Silverlight,WP7

我的应用程序中有一个数据透视,在每次LoadedPivotItem事件之后,我想查看UI树以查看每个项目在屏幕上的位置。具体来说,我对边距值感兴趣,边距值是屏幕左侧的x偏移量

这是我的密码:

GeneralTransform gt = myUIElement.TransformToVisual(Application.Current.RootVisual);
double x = ((MatrixTransform)gt).Matrix.OffsetX;
Debug.WriteLine("Margin = {0}, UIElement = {1}", x, myUIElement);
当应用程序启动时,执行此代码,打印输出示例如下:

Margin = 12, UIElement = System.Windows.Controls.TextBlock
问题是,一旦我滑动(LoadedPivotItem事件触发)并移动到右侧的轴,边距就会变成负数。例如:

Margin = -468, UIElement = System.Windows.Controls.TextBlock
奇怪的是,即使我扫回第一个轴,边距上的值也会变为:

Margin = 492, UIElement = System.Windows.Controls.TextBlock
如果我继续朝一个方向滑动,并返回到第一个轴,则边距上的值将变为:

Margin = -468, UIElement = System.Windows.Controls.TextBlock
我意识到这些数字都被480的屏幕大小抵消了,但对我来说似乎不一致,我不想处理屏幕大小的调整

关于为什么会发生这种情况以及如何解决它,有什么建议吗?

提前感谢。

我已经找到了解决这个问题的最简单的方法,那就是用屏幕宽度%mod x偏移以获得实际的边距。这里我假设屏幕宽度是480

double x = ((MatrixTransform)gt).Matrix.OffsetX
if (x < 0)
{
    // modding a negative number is equal to the negative modding of the positive number
    x = 480 + (x % 480);
}
else
{
    x = x % 480;
} 
double x=((矩阵变换)gt).Matrix.OffsetX
if(x<0)
{
//修改负数等于修改正数的负数
x=480+(x%480);
}
其他的
{
x=x%480;
} 
在多次左右旋转之后,我想我已经明白了发生了什么。UIElements会根据您滑动的方式进行正反转换,但向左滑动和向右滑动不会相互抵消,因为RootVisual的(0,0)位置相对于UIElement会发生变化