Silverlight Tips(4)
又到开学季节,或许过了这次,人生再也没有开学的机会了,临近毕业的时候,才发现四年就快过去了,才发现有多想留住时间,先不感慨了,这篇继续记录几个小的Tips。
ItemsControl中添加ScrollViewer
修改ControlTemplate,将ScrollViewer添加至ItemsPresent中即可
<ItemsControl x:Name="itemControl" ><ItemsControl.Template><ControlTemplate><ScrollViewer x:Name="scollViewer" Padding="{TemplateBinding Padding}" /></ControlTemplate></ItemsControl.Template></ItemsControl>
获取元素的相对坐标
最普遍的场景是获取子控件中相对父控件的的坐标
<StackPanel Margin="130,60,0,0" Name="parentElement" ><TextBox Name="childElement" /></StackPanel>
C#Code:
Point point = childElement.TransformToVisual(parentElement).Transform(new Point(0,0));
当子元素在父元素的左边或者上面,坐标值会是负数。
如果要获得绝对位置,那么计算元素相对根元素的位置
Point point1 = uiElement.TransformToVisual(App.Current.RootVisual).Transform(new Point(0,0));
获取区域内的元素
在某个场景中,我们需要获取某一个区域(点)内的对象,这可以使用Silverlight中的VisualTreeHelper.FindElementsInHostCoordinates来实现,
它可以获取一个Rect或者Point内的对象:
Rect rect = new Rect(100, 100, 100, 100);
IEnumerable<UIElement> elementsInAreas = VisualTreeHelper.FindElementsInHostCoordinates(rect,uiElement);