WEB开发网
开发学院图形图像Flash My Silverlight系列(11)—— Silverlight中的右... 阅读

My Silverlight系列(11)—— Silverlight中的右键事件点击模拟(全局版本)

 2009-04-25 12:04:33 来源:WEB开发网   
核心提示: 这样,余下的工作就可以通过Silverlight中ManagedCode同Javascript的操作来实现了,My Silverlight系列(11)—— Silverlight中的右键事件点击模拟(全局版本)(2),在这里,首先提出一个类,为了方便起见,我在里面加入了几个方法,它能帮助我

这样,余下的工作就可以通过Silverlight中ManagedCode同Javascript的操作来实现了。在这里,首先提出一个类,它能帮助我们计算出任何一个UIElement从Application的RootVisual的平移值。这个类我写成了静态类,并且写成Extension Method,其实用普通的静态类,同样也是可行的。

 1    public static class GlobalTransform
 2    {
 3        private static readonly Point Origin = new Point(0, 0);
 4        public static Point TransformFromRootVisual(this UIElement element)
 5        {
 6            UIElement uiElement = Application.Current.RootVisual;
 7            if (uiElement == null)
 8                throw new InvalidOperationException();
 9            MatrixTransform globalTransform = (MatrixTransform)element.TransformToVisual(uiElement);
10            Point p = globalTransform.Matrix.Transform(Origin);
11            return p;
12        }       
13    }

然后,我介绍一下EventArgs类。其实这个类,只不过是传递了鼠标在Silverlight Application上点击点的绝对定位值,为了方便起见,我在里面加入了几个方法,包括命中测试和被点击到的所有UIElement的可遍历集合。

 1public sealed class MouseRightClickEventArgs : EventArgs
 2    {
 3        internal MouseRightClickEventArgs(double x, double y)
 4        {
 5            m_XOffset = x;
 6            m_YOffset = y;
 7        }
 8
 9        private double m_XOffset;
10        private double m_YOffset;
11
12        public Point GetPosition(UIElement relativeTo)
13        {
14            if (relativeTo != null)
15            {
16                Point p = relativeTo.TransformFromRootVisual();
17                return new Point(m_XOffset - p.X, m_YOffset - p.Y);
18            }
19            return new Point(m_XOffset, m_YOffset);
20        }
21
22        public IEnumerable<UIElement> FindElementsInHitPoint()
23        {
24            return VisualTreeHelper.FindElementsInHostCoordinates(GetPosition(null), Application.Current.RootVisual);
25        }
26
27        public bool HitTest(UIElement relativeTo)
28        {
29            foreach (UIElement element in FindElementsInHitPoint())
30            {
31                if (element == relativeTo)
32                    return true;
33            }
34            return false;
35        }
36
37        private bool m_Handled;
38        // Summary:
39        //     If you don't want to see the Silverlight Configuration,
40        //     set it as true
41        public bool Handled
42        {
43            get { return this.m_Handled; }
44            set { this.m_Handled = value; }
45        }
46    }

上一页  1 2 3 4  下一页

Tags:My Silverlight 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接