windows phone (24) Canvas元素A

简介:

 

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

 

  • Height 属性等于 0。

  • Width 属性等于 0。

  • Opacity 属性等于 0。

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

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

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

xaml主要代码:

 
  1. <!--ContentPanel - 在此处放置其他内容--> 
  2.        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
  3.            <Canvas> 
  4.                <Canvas.Resources> 
  5.                    <Style x:Key="ellipseStyle" TargetType="Ellipse"> 
  6.                        <Setter Property="Width" Value="100"></Setter> 
  7.                        <Setter Property="Height" Value="100"></Setter> 
  8.                        <Setter Property="Stroke" Value="{StaticResource PhoneAccentBrush}"></Setter> 
  9.                        <Setter Property="StrokeThickness" Value="9"></Setter> 
  10.                    </Style> 
  11.                </Canvas.Resources> 
  12.                <Ellipse Style="{StaticResource ellipseStyle }" Stroke="Blue" Canvas.Left="50" Canvas.Top="0"></Ellipse> 
  13.                <Ellipse Style="{StaticResource ellipseStyle }" Stroke="Yellow" Canvas.Left="150" Canvas.Top="0"></Ellipse> 
  14.                <Ellipse Style="{StaticResource ellipseStyle }" Stroke="Black" Canvas.Left="250" Canvas.Top="0"></Ellipse> 
  15.                <Ellipse Style="{StaticResource ellipseStyle }" Stroke="Green" Canvas.Left="100" Canvas.Top="50"></Ellipse> 
  16.                <Ellipse Style="{StaticResource ellipseStyle }" Stroke="Red" Canvas.Left="200" Canvas.Top="50"></Ellipse> 
  17.            </Canvas> 
  18.        </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文件代码如下:

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

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

 
  1. // 构造函数 
  2.         public MainPage() 
  3.         { 
  4.             InitializeComponent(); 
  5.         } 
  6.  
  7.         private void cav_SizeChanged(object sender, SizeChangedEventArgs e) 
  8.         { 
  9.             cav.Children.Clear(); 
  10.             for (double y = 0; y < e.NewSize.Height; y++) 
  11.             { 
  12.                 for (int x = 0; x < e.NewSize.Width; x++) 
  13.                 { 
  14.                     Ellipse el = new Ellipse(); 
  15.                     el.Width = 100
  16.                     el.Height = 100
  17.                     //代码读取自定义样式 
  18.                     el.Stroke = this.Resources["PhoneAccentBrush"] as Brush; 
  19.                     el.StrokeThickness = 9
  20.                     Canvas.SetLeft(el, x); 
  21.                     Canvas.SetTop(el, y); 
  22.  
  23.                     cav.Children.Add(el); 
  24.                 } 
  25.             } 
  26.         } 

 设置附加属性Left和Top

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

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

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

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

 

本文转自shenzhoulong  51CTO博客,原文链接:http://blog.51cto.com/shenzhoulong/849430,如需转载请自行联系原作者

相关文章
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
1286 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。
139 0
Windows Phone快速入门需掌握哪些能力
|
编解码 前端开发 JavaScript
Windows Phone 下开发 LBS 应用
基于位置的服务(Location Based Service,LBS),它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务。
168 0
|
移动开发 Android开发 开发者
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
在Build 2014大会上,微软正式发布了传闻已久的Windows Phone 8.1系统,所有的Windows Phone 8手机都可以升级,微软这次可谓是十分厚道。虽然并非迭代升级,但WP 8.1还是拥有很多重大更新,对于微软进一步完善移动平台拥有积极的意义。下面,就一起来了解一下WP 8.1的主要新特性。
238 0
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
|
Windows
背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素
原文:背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素 [源码下载] 背水一战 Windows 10 (76) - 控件(控件基类): Control -...
1115 0

热门文章

最新文章