如何找到膨胀膨胀器的中心

本文关键字:膨胀 何找 | 更新日期: 2023-09-27 17:55:06

好的,这让我很困惑,它应该是简单的

我有这个代码

private void Expander_Expanded(object sender, RoutedEventArgs e)
{
    var expand = e.OriginalSource as Expander;
    if (expand != null)
    {
        var layer = sender as LayerBase;
        var middle = expand.TranslatePoint(new Point(), layer) + new Vector(expand.ActualWidth/2,expand.ActualHeight/2);
        Location.Centre = layer.ScreenToGeoPoint(middle);
        e.Handled = true;
    }
}

这是代码应该做的,

  • 将屏幕点定位在控件的中心
  • 定位与该屏幕点相关的地理点
  • 将地图重新居中到那些坐标

这是为了确保扩展器在显示的地图的中心,没有移动扩展器相对于地图(即,左上角仍然在正确的地理位置)

代码本身正在运行,然而,ActualHeight和ActualWidth正在返回折叠展开器的大小,这是抛出了一个很大的边缘中心点,我假设这是因为扩展事件在控件重新绘制之前被触发。那么,我如何捕获扩展后的视觉树重绘改变?

如何找到膨胀膨胀器的中心

private async void Expander_Expanded(object sender, RoutedEventArgs e)
{
    var expand = e.OriginalSource as Expander;
    if (expand != null)
    {
        var layer = sender as LayerBase;
        // magic
        await Dispatcher.InvokeAsync( ( ) => { } );
        expand.UpdateLayout();
        var middle = expand.TranslatePoint(new Point(), layer) + new Vector(expand.ActualWidth/2,expand.ActualHeight/2);
        Location.Centre = layer.ScreenToGeoPoint(middle);
        e.Handled = true;
    }
}

可以了