Canvas的特点:

和grid, stackpanel等有明显区别:它没有动态布局。子元素放上去后就定住了。

因此canvas的子元素不用设置alignment,margin这些东西,也无法自适应landscape和portrait之间的转换。

如果用canvas做主布局,就要么landscape,要么portrait,最好不要两者都支持。

canvas的默认长宽都是0,超出canvas边界的部分也会显示出来,记得要给canvas设置长宽。

若跑出canvas以外的子元素被点击了,canvas仍然收的到这个事件。

canvas的默认背景色不是transparent,而是null。背景色是null和transparent看起来是一样,区别在于transparent可以响应点击,null不行(子元素被点击除外)。

 

点画线

image

 

让Button更容易命中的技巧

如果button后面的背景也接收点击,那么很容易会点错,这时候可以增加padding来让button更容易命中。

 

IsHitTestVisible

这个属性为false则不响应任何手势,视觉上不透明,“触觉上”是透明的。

 

Slider控件

它的LargeChange属性表示一次最小拖动的改变量。SmallChange不起任何作用。

要把slider的vertical alignment属性设为center,如果是默认值Strech,则触到父容器内别的地方也会激发slider的改变。

 

GetPosition函数定位触摸位置

在tap和drag的时候,都可以通过事件的参数来得到位置信息。

设置捕获drag和tap事件的函数:

<Canvas  MouseMove="InteractiveCanvas_MouseTapOrDrag"
                MouseLeftButtonDown="InteractiveCanvas_MouseTapOrDrag">

用GetPosition函数处理事件:

        void InteractiveCanvas_MouseTapOrDrag(object sender, MouseEventArgs e)
        {
            // Get the finger position relative to the landscape-oriented page
            double x = e.GetPosition(this).X;

其中GetPosition函数的形参relativeTo是指相对于哪个控件的位置,并非必须是父控件。

 

在代码中使用静态资源

XAML里的StaticResource,用C#代码是:Application.Current.Resources[“name”] 的形式,例如:

this.LayoutRoot.Background = Application.Current.Resources[“PhoneChromeBrush”] as Brush;

posted on 2011-10-08 23:28  MainTao  阅读(426)  评论(0编辑  收藏  举报