原文: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

windows phone (24) Canvas元素A的更多相关文章

  1. windows phone (25) Canvas元素B

    原文:windows phone (25) Canvas元素B  ZIndex 这也是一个附加属性,表示canvas的children集合内的子元素的显示顺序,在canvas中的元素默认情况下是后面的 ...

  2. 与众不同 windows phone (24) - Input(输入)之软键盘类型, XNA 方式启动软键盘, UIElement 的 Touch 相关事件, 触摸涂鸦

    原文:与众不同 windows phone (24) - Input(输入)之软键盘类型, XNA 方式启动软键盘, UIElement 的 Touch 相关事件, 触摸涂鸦 [索引页][源码下载] ...

  3. windows phone (23) ScrollViewer元素

    原文:windows phone (23) ScrollViewer元素 ScrollViewer类表示可包含其他可见元素的可滚动区域,一般会用在屏幕的宽度和高度不够用时,作为一种延伸使用,参考书上称 ...

  4. windows phone (18) Border元素

    原文:windows phone (18) Border元素 Border类是对某一个对象的周围边框,背景,或者同时绘制两者,首先看一个简单的例子进行分析[作者:神舟龍] xaml文件: <!- ...

  5. 背水一战 Windows 10 (24) - MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过非 ButtonBase 触发命令

    [源码下载] 背水一战 Windows 10 (24) - MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过非 ButtonBase 触发命令 作者:webabcd ...

  6. 【高级功能】使用canvas元素(第一部分)

    1. 开始使用 canvas 元素 canvas 元素非常简单,这是指它所有的功能都体现在一个JavaScript对象上,因此该元素本身只有两个属性:width 和 height. canvas 元素 ...

  7. 使用canvas元素-art方法绘制圆弧

    最近在学习HTML5,发现canvas真的很棒,canvas元素是一种可供绘图的平面,我们用JavaScript对它进行配置和操作.我这里说一下arc方法绘制圆弧,顺便提一下涉及到的基础知识. 首先看 ...

  8. 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换

    [源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...

  9. HTML5 画布canvas元素

    HTML5的canvas元素以及随其而来的编程接口Canvas API应用前景极为广泛.简单地说,canvas元素能够在网页中创建一块矩形区域,这块矩形区域可以成为画布,这其中可以绘制各种图形.可别小 ...

随机推荐

  1. 【从cocos2d-x学习设计模式】第一阶段:辛格尔顿

    设计模式,它总结了前辈在许多方案重用代码.它是一个想法. 因为我们爱cocos2d-x,然后我们从去cocos2d-x在设计模式中,右一起学习!本篇解释未来辛格尔顿. 提cocos2d-x中间Dire ...

  2. J2EE之初识JSP

    上篇博客已经简介了下Servlet.从上篇博客中能够看到.Servlet获得返回来的数据后.显示给client时,须要不断的拼串.从而构成完整的html页面,这就在无形中加大了程序猿的压力和劳动力.而 ...

  3. SilkTest Q&A 3

    Q21:如何给testcase的属性赋值? A21: 1.确定你的testplan处于打开状态. 2.点击你准备赋属性值的testcase 3.点击TestPlan/detail菜单,testplan ...

  4. pptv web前端面试题

    今天上午一考完试,就一直等待pptv的电话,结果下午就收到了pptv的通知(pptv的效率还是很不错的,之前面试官和我说在一到两周之内给回复,结果过了7天就给回复了,赞一个)因为我面试的是web前端( ...

  5. 【MFC两种视频图像採集方法】DirectShow与Opencv

    效果图: DirectShow採集核心代码: 创建线程调用该函数,採集图像通过x264解码封装rtmp协议包.推送至FMSserver,可实现视频直播 UINT __stdcall StartVide ...

  6. js错误 SyntaxError: missing : after property id

    在用jquery的post方法时 $.post('adminCheckTpmisPlans.do',{'test',str},function(f){ ... }) 报如下错误 SyntaxError ...

  7. 为了树莓派IIraspberrypi安装emacs+ecb+cedet+session+color-theme+cscope+linum

    类似这篇文章写的不多,为了避免以后大家转来转去而忽略了写文章的时间,这些特别加上是2014年6月28日,省的对不上一些软件的版本号(下文中有些"最新"的说法就相应这个时间).假设转 ...

  8. [Cocos2d-x]节点的生命周期

    清楚的知道一个对象的生命周期,在开发时候是非常必要的,对于自身定义并且创建的对象而言,它的生命周期是由程序员控制,但是对于coco2d-x中的节点,我们必须弄清它的生命周期,这样才能在开发中得心应手. ...

  9. 登录RMAN 报告ORA-12162:TNS:net service name is incorrectly specified错

    登录RMAN 报告ORA-12162:TNS:net service name is incorrectly specified错 [oracle@localhost admin]$ date Tue ...

  10. 无状态TCP的ip_conntrack

    Linux的ip_conntrack实现得过于沉重和精细.而实际上有时候,根本不需要在conntrack中对TCP的状态进行跟踪,只把它当UDP好了,我们的需求就是让系统可以将一个数据包和一个五元组标 ...