如何在Silverlight中获得物体的真实位置?
我在屏幕上居中显示标题图片。当我使浏览器窗口变小时,显然,标题的左侧离开了屏幕。找出实际位置很好,知道是否要将对象放在图像上方。
我捕获了Content_Resized并运行了一些测试:
if (App.Current.Host.Content.ActualWidth > header.Width)
{
TEST = Canvas.GetLeft(header);
}
else
{
TEST = Canvas.GetLeft(header);
}
TEST始终返回零。
编辑:标题位于网格而不是画布上。 “好吧,有你的问题......”所以一个更好的问题可能是这个。如何将图像的边距放在网格上?
答案 0 :(得分:1)
我可能应该回答这个问题,但是如何找到一个元素相对于另一个元素的位置可能是之前(由我自己和其他人)在这里以及tinternet上的其他地方得到回答。
但是,如果您的目标是将图片放在图片上,则将图片放在Grid
中,然后将该项目添加为Grid
的子项。这样,您可以将图像上的相对位置指定为项目的边距,然后让Silverlight的布局系统完成剩下的工作。
作为一般规则,如果您认为需要编写代码来移动事物的大小,那么除非您正在编写自定义面板或其他东西,否则您可能无法正确使用Silverlight布局系统。
修改强>:
尝试此实验: -
<Grid x:Name="LayoutRoot">
<Grid x:Name="headerContainer" Margin="50, 60, 0, 0" HorizontalAlignment="Left" VerticalAlignment="Top">
<Image Source="YourLargeImage" />
<Image Source="YourSmallerImage" HorizontalAlignment="Center" VerticalAlignment="Top" />
</Grid>
</Grid>
现在尝试更改内部网格的边距以在屏幕上移动其位置。请注意,较小的图像始终保留在大图像的顶部中心。
答案 1 :(得分:0)
我明白了。
首先,这些图像位于网格上,而不是画布上。但是将网格切换到画布会导致许多其他问题,其中之一就是我不能像以前一样将标题图像居中。
解决方案是在内容调整大小时更改位于较大标题图像顶部的较小图像的边距:
blankbarimage.Margin = new Thickness((App.Current.Host.Content.ActualWidth - header.Width) / 2, 0, 0, 0);
顺便提一下,你创建一个像这样的内容调整大小的方法:
App.Current.Host.Content.Resized += new EventHandler(Content_Resized);
所以,为了回答我自己的问题,你在silverlight中获得对象的真实位置的方式是(如果它们在网格上),通过查看它们的边距设置。