WPF,这里的偏移量指的是什么?

时间:2022-04-10 08:17:28
Visual.TransformToAncestor 方法 (Visual): MSDN。返回一个转换,该转换可用于将 Visual 中的坐标转换为可视对象的指定 Visual 上级。


<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="725">
    <StackPanel Margin="16">
        <StackPanel Margin="8">
            <TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" MouseDown="myTextBlock_MouseDown"/>
        </StackPanel>
    </StackPanel>
</Window>


private void myTextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    GeneralTransform generalTransform1 = myTextBlock.TransformToAncestor(this);
    Point currentPoint = generalTransform1.Transform(new Point(0, 0));
    MessageBox.Show(currentPoint.X.ToString());
    MessageBox.Show(currentPoint.Y.ToString());
}


按照MSDN链接的解释,不太看得懂,MSDN到底说的是什么意思,很绕口。上面的示例也是MSDN的原生示例,演示如何使用 TransformToAncestor 方法检索 TextBlock 相对于包含 Window 的偏移量。 偏移量值包含在返回的 GeneralTransform 内。

我想问的是这里求的 TextBlock 相对于 Window 的偏移量,是什么意思啊,这样的结果有什么意义呢?那些场合用得上?
 如果是坐标的话,可以用UIElement.TranslatePoint 方法啊( MSDN)。偏移量又是什么呢

5 个解决方案

#1


偏移量 是到参照的距离

#2


引用 1 楼 xuzuning 的回复:
偏移量 是到参照的距离

此例的话,就是TextBlock的左上角 相对于 Window 左上角的距离吗?X和Y吗?那不就是坐标吗?

#3


对的,就是坐标

#4


坐标偏移量,就是坐标 p1 与 坐标 p2 的差(减法)。多读点数学方面的书就好了。

#5


坐标是相对于原点来说的,一个坐标值表达的是相对于原点的方向。但是 p1减去p2是什么方向?

#1


偏移量 是到参照的距离

#2


引用 1 楼 xuzuning 的回复:
偏移量 是到参照的距离

此例的话,就是TextBlock的左上角 相对于 Window 左上角的距离吗?X和Y吗?那不就是坐标吗?

#3


对的,就是坐标

#4


坐标偏移量,就是坐标 p1 与 坐标 p2 的差(减法)。多读点数学方面的书就好了。

#5


坐标是相对于原点来说的,一个坐标值表达的是相对于原点的方向。但是 p1减去p2是什么方向?