如何获取ChildWindow和父窗口之间的距离?

时间:2010-07-09 12:03:14

标签: wpf silverlight silverlight-3.0

我们可以计算ChildWindow和ParentWidnow之间的差距吗?

虽然我可以在ChildWindow周围拖动,但是距离顶部和左侧有一个距离。

我尝试使用以下方式获取距离:

ChildWindow.Margin 

它返回0,0,0,0

还有其他方法可以获得ChildWindow和ParantWindow之间的距离吗?

2 个答案:

答案 0 :(得分:1)

子窗口控件实际占用Silverlight内容窗口上的所有可用空间。模板中的第一个元素是叠加层Grid。它的这个网格使“父”窗口内容变暗,并消耗所有鼠标事件,否则这些事件会转到“父”内容。

Overlay Grid内部是另一个名为“ContentRoot”的网格,其中包含边框,镶边和您的子内容。它的这个Grid会被拖延并且会有一个保证金。

使用此扩展方法: -

public static class VisualTreeEnumeration  
{  
   public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)  
   {  
     int count = VisualTreeHelper.GetChildrenCount(root);  
     for (int i=0; i < count; i++)  
     {  
       var child = VisualTreeHelper.GetChild(root, i);  
       yield return child;  
       foreach (var descendent in Descendents(child))  
         yield return descendent;  
     }  
   }  
}

你可以找到ContentRoot: -

Grid contentRoot = myChildWindow.Descendents().OfType<Grid>().Where(g => g.Name == "ContentRoot");

从中获得保证金

答案 1 :(得分:0)

尝试使用Windows的PointToScreen和PointFromScreen方法。

PointFromScreen article

PointToScreen article