windows phone (24) Canvas元素A

简介: 原文:windows phone (24) Canvas元素A  Canvas 元素表示定制一个区域,并可以通过相对坐标定义子元素位置,在一下情况下Canvas是不可见的   Height 属性等于 0。
原文: windows phone (24) Canvas元素A

 

Canvas 元素表示定制一个区域,并可以通过相对坐标定义子元素位置,在一下情况下Canvas是不可见的

 

  • Height 属性等于 0。

  • Width 属性等于 0。

  • Opacity 属性等于 0。

  • Canvas 的某个上级对象不可见。

  • Background等于null
  • Visiblity属性等于Collapsed

 下面是一个的示例是一个绘制奥运五环旗的效果

xaml主要代码:

 <!--ContentPanel - 在此处放置其他内容-->
        <Grid x:Name= " ContentPanel " Grid.Row= " 1 " Margin= " 12,0,12,0 ">
            <Canvas>
                <Canvas.Resources>
                    <Style x:Key= " ellipseStyle " TargetType= " Ellipse ">
                        <Setter Property= " Width " Value= " 100 "></Setter>
                        <Setter Property= " Height " Value= " 100 "></Setter>
                        <Setter Property= " Stroke " Value= " {StaticResource PhoneAccentBrush} "></Setter>
                        <Setter Property= " StrokeThickness " Value= " 9 "></Setter>
                    </Style>
                </Canvas.Resources>
                <Ellipse Style= " {StaticResource ellipseStyle } " Stroke= " Blue " Canvas.Left= " 50 " Canvas.Top= " 0 "></Ellipse>
                <Ellipse Style= " {StaticResource ellipseStyle } " Stroke= " Yellow " Canvas.Left= " 150 " Canvas.Top= " 0 "></Ellipse>
                <Ellipse Style= " {StaticResource ellipseStyle } " Stroke= " Black " Canvas.Left= " 250 " Canvas.Top= " 0 "></Ellipse>
                <Ellipse Style= " {StaticResource ellipseStyle } " Stroke= " Green " Canvas.Left= " 100 " Canvas.Top= " 50 "></Ellipse>
                <Ellipse Style= " {StaticResource ellipseStyle } " Stroke= " Red " Canvas.Left= " 200 " Canvas.Top= " 50 "></Ellipse>
            </Canvas>
        </Grid>

 从上面代码中可以看到我们定义了一个Style对象,定义在Canvas.Resources集合中,为每一个Elliips定义了宽和高,并且宽和高相同,所以就是圆了,并且定义了颜色和粗细为9,显然我们在用到这个这个Style对象后,有使用了Stroke属性,所以Style对象中的Stroke属性设置的也就没有用了;我们看以看到在Ellipse中的属性Canvas.Left和Canvas.Top,Lefe表示该子元素左侧位置Canvas的距离,Top表示子元素顶部位置Canvas的距离

显示的效果:

 

如果背景色是黑的,五环中的黑色圈就像是不出来,所以背景设置成了浅色。其实有个蹊跷的地方,就是在Ellipse 中使用Canvas.Left和Canvas.right,这就是附加属性,Left和Top实际上是定义在Canvas类中的,但是这些属性可以在其元素进行设置(如果设置在非子元素,该设置将被忽略),其实之前我们已经用到了,比如Grid.Row

 下面的示例是演示代码怎么设置附加属性

xaml文件代码如下:

 <!--ContentPanel - 在此处放置其他内容-->
        <Grid x:Name= " ContentPanel " Grid.Row= " 1 " Margin= " 12,0,12,0 ">
            <Canvas Name= " cav " SizeChanged= " cav_SizeChanged ">
            </Canvas>
        </Grid>

 显然这里canvas并没有占有实际的空间,因为我们并没有看到最上面那些属性,并且grid也是显示的,但是它仍然有具体的大小和SizeChange事件,当SizeChange事件触发是,首先要情况所有的子元素,然后再通过循环创建新的Ellipse对象,并添加到Canvas中去

  //  构造函数
         public MainPage()
        {
            InitializeComponent();
        }

         private  void cav_SizeChanged( object sender, SizeChangedEventArgs e)
        {
            cav.Children.Clear();
             for ( double y =  0; y < e.NewSize.Height; y++)
            {
                 for ( int x =  0; x < e.NewSize.Width; x++)
                {
                    Ellipse el =  new Ellipse();
                    el.Width =  100;
                    el.Height =  100;
                     // 代码读取自定义样式
                    el.Stroke =  this.Resources[ " PhoneAccentBrush "as Brush;
                    el.StrokeThickness =  9;
                    Canvas.SetLeft(el, x);
                    Canvas.SetTop(el, y);

                    cav.Children.Add(el);
                }
            }
        }

 设置附加属性Left和Top

 

Canvas.SetLeft(el, x);
Canvas.SetTop(el, y);

这两个方法是在Canvas中定义的静态方法,可以在未添加子元素和添加子元素后使用这些方法,或者在Canvas对象不存在的时候调用;也可以把静态方法换成

 

el.SetValue(Canvas.LeftProperty,x);
el.SetValue(Canvas.TopProperty,y);

 

 SetValue方法是访问一个有DependencyObject创建和维护的内部字典表,第一个参数是key,第二个是value

 

 

目录
相关文章
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
1852 0
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
|
XML 开发框架 前端开发
Windows Phone快速入门需掌握哪些能力
在此之前,先普及下Windows Phone的概念和开发工具的介绍。 Windows Phone是微软公司开发的手机操作系统,它将微软旗下的Xbox Live游戏、Xbox Music音乐与独特的视频体验集成至手机中。2012年6月21日,微软正式发布Windows Phone 8,采用和Windows 8相同的Windows NT内核,同时也针对市场的Windows Phone 7.5发布Windows Phone 7.8。
335 0
Windows Phone快速入门需掌握哪些能力
|
移动开发 Android开发 开发者
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
在Build 2014大会上,微软正式发布了传闻已久的Windows Phone 8.1系统,所有的Windows Phone 8手机都可以升级,微软这次可谓是十分厚道。虽然并非迭代升级,但WP 8.1还是拥有很多重大更新,对于微软进一步完善移动平台拥有积极的意义。下面,就一起来了解一下WP 8.1的主要新特性。
361 0
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
|
编解码 前端开发 JavaScript
Windows Phone 下开发 LBS 应用
基于位置的服务(Location Based Service,LBS),它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务。
373 0
|
Windows
背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素
原文:背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素 [源码下载] 背水一战 Windows 10 (76) - 控件(控件基类): Control -...
1204 0
|
28天前
|
运维 安全 网络安全
Windows Server 2019拨号“找不到设备”?Error 1058解决指南
Windows Server 2019拨号报错1058?别急!这不是硬件故障,而是关键服务被禁用。通过“服务依存关系”排查,依次启动“安全套接字隧道协议”“远程接入连接管理”和“路由与远程访问”服务,仅需4步即可恢复PPPoE或VPN拨号功能,轻松解决网络中断问题。
126 1
|
28天前
|
存储 SQL 人工智能
Windows Server 2025 中文版、英文版下载 (2025 年 9 月更新)
Windows Server 2025 中文版、英文版下载 (2025 年 9 月更新)
675 3
Windows Server 2025 中文版、英文版下载 (2025 年 9 月更新)