1.Windows Phone8比Windows Phone7多了哪些:
支持C++(组件级的补充,主体还是C#);采用Windows 8 SDK;更多API;
2.普通的手机只能通过MarketPlace这个唯一的渠道下载安装软件,开发者帐户机制,对于手机可以使用开发者帐户去对手机解锁(Developer Unlock)。花钱买:99$。开发者帐户:被手机解锁,可以上传软件到MarketPlace。
学生账号:免费,edu邮箱,wpxap.com去求,去淘宝也能买。学生账号只能部署3个程序,普通开发者帐户是10个,满了就删旧的。
刷机完全越狱:没有数量限制,不能上传到Marketplace。每种手机刷机方法不一样。小心谨慎。
3.“生成操作=Content,内容”是放到XAP压缩包中的,“生成操作=Resource,资源”是放到dll中的。Content效率高。
XAML是编译生成到dll的资源中的,然后允许时通过LoadComponent加载xaml文件。不像asp.net中aspx和cs那样的继承关系。
4.Silverlight中有Canvas、StackPanel、Grid三种基本布局容器,放在布局容器中的控件按照布局容器的特点进行布局。
5.Canvas就是根据坐标、大小进行绝对定位布局。
<Canvas>
<Button Canvas.Left="28" Canvas.Top="26" Content="Button" Height="45" Width="92" />
<TextBox Canvas.Left="44" Canvas.Top="81" Height="23" Width="183" />
</Canvas>
Canvas.Top属性指定控件左上角的纵坐标; Canvas.Left属性指定控件左上角的横坐标。
补充:代码设置Top、Left等附加属性的方法:Canvas.SetTop(控件名称,值)。
StackPanel是把子控件横向或者纵向排列,Orientation属性设定排列方向:Horizontal(水平)、Vertical(纵向,默认值)
<StackPanel>
<TextBox Height="23" Width="120"/>
<TextBox Height="23" Width="120"/>
<TextBox Height="23" Width="120"/>
</StackPanel>
Grid
首先定义行数和列数,以及占的宽、高;Grid.Column、Grid.Row设定所在的行、列;Grid.ColumnSpan、Grid.RowSpan设定占据的行、列
无论哪种布局都可以通过Margin属性(左上右下)修改元素之间的相对距离,类似于HTML;
Width、Height的可选值:Auto:自动;*剩余空间;0.3*:占据30%空间。
6.如何通过代码动态添加控件:sp1.Children.Add(tb);
以及动态定位控件TextBox tb1 = (TextBox)FindName("动态txt1");
7.Silverlight的界面都是使用画刷(Brush)画出来的,可以改变不同的画刷画不同的内容:
SolidColorBrush:实心颜色画刷
LinearGradientBrush:渐变画刷
RadialGradientBrush:径向渐变画刷(以圆心散射)
ImageBrush:图片画刷
Brush类型的属性都可以指定各种Brush,比如Button的Foreground属性、Rectangle(矩形图形)的Fill属性。
<Rectangle>
<Rectangle.Fill>
<SolidColorBrush>Red</SolidColorBrush>
</Rectangle.Fill>
</Rectangle>
<TextBlock Text="World" FontSize="56">
<TextBlock.Foreground>
<!--渐变画刷-->
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<GradientStop Color="Blue" Offset="0"></GradientStop>
<GradientStop Color="Yellow" Offset="0.5"></GradientStop>
<GradientStop Color="Red" Offset="1"></GradientStop>
</LinearGradientBrush>
</TextBlock.Foreground>
</TextBlock>
线性渐变中有“渐变点”的概念,也就是在渐变的路线中设置渐变点(GradientStop)的颜色(Color),由于可以设定多个渐变点,因此需要设定渐变点的偏移量(Offset,最大为1,最小为0)
LinearGradientBrush默认是从左上角(0,0)渐变到右下角(1,1),可以通过StartPoint、EndPoint属性设置渐变的起止点:<LinearGradientBrush StartPoint=“0.5,0" EndPoint=“0.5,1" >
Name和x:Name的区别:所有的可视控件都继承自FrameworkElement, FrameworkElement类中定义类Name属性。继承自FrameworkElement的类即可以使用Name也可以使用x:Name,但是不是FrameworkElement子类只能使用x:Name。
<TextBlock Text="World" FontSize="56">
<TextBlock.Foreground>
<!--径向渐变画刷(以圆心散射)-->
<RadialGradientBrush>
<GradientStop Color="Blue" Offset="0"></GradientStop>
<GradientStop Color="Yellow" Offset="0.5"></GradientStop>
<GradientStop Color="Red" Offset="1"></GradientStop>
</RadialGradientBrush>
</TextBlock.Foreground>
</TextBlock>
<!--图片画刷,Stretch图片排列方式-->
<TextBlock Text="图片画刷" FontSize="56">
<TextBlock.Foreground>
<ImageBrush ImageSource="Koala.jpg" Stretch="UniformToFill"></ImageBrush>
</TextBlock.Foreground>
</TextBlock>
RotateTransform:旋转变换。
ScaleTransform:缩放变换。
SkewTransform:倾斜变换。
TranslateTransform:平移变换。
<Image.RenderTransform>
<RotateTransform CenterX="40" CenterY="40" Angle="-30"></RotateTransform>
</Image.RenderTransform>
CenterX、CenterY为最大值为像素,Angle为旋转角度,顺时针为正,逆时针为负。
ScaleTransform为元素缩放
<Image.RenderTransform>
<ScaleTransform CenterX=“40” CenterY=“40” ScaleX=“2” ScaleY=“0.5”></ScaleTransform> ScaleX、 ScaleY为缩放的倍数。
</Image.RenderTransform>
如果ScaleX、 ScaleY设置为负值,则可以实现翻转的效果。案例:带倒影的视频播放器。图片放大、缩小
3)倾斜变换
<Image.RenderTransform>
<SkewTransform AngleX="30" AngleY="10"></SkewTransform>
</Image.RenderTransform>
4)平移变换
<Image.RenderTransform>
<TranslateTransform X="30" Y="50"></TranslateTransform>
</Image.RenderTransform>
X、Y表示平移的变化量。因为不推荐使用Canvas布局,所以如果动态控制元素位置、大小一般使用ScaleTransform 、 TranslateTransform ,不推荐修改元素的Height、Width和坐标。
Silverlight推荐用Tap(点击)、DoubleTap(双击)、Hold(长按)
8.用户控件实现等待控件:继承UserControl,使用的时候先在头部引用所在的命名控件和程序集,并且给一个别名
xmlns:ctrls="clr-namespace:PhoneApp1.Ctrls",然后就可以<ctrls:WaitingControl x:Name="wc1"></ctrls:WaitingControl>使用了
自定义控件:继承自现有的控件,给控件加更多功能。
用户控件是组合现有控件,自定义控件是继承现有控件增加更多功能
投射不是变换
<Image.Projection>
<PlaneProjection RotationX="20"></PlaneProjection>
</Image.Projection>
9样式:页面样式
<phone:PhoneApplicationPage.Resources>
<Style TargetType="TextBlock" x:Name="tb4">
<Setter Property="Foreground" Value="Red"></Setter>
</Style>
<Style TargetType="TextBlock" x:Name="tb1">
<Setter Property="Foreground" Value="Blue"></Setter>
</Style>
<Style TargetType="TextBlock" x:Name="tb2" BasedOn="{StaticResource tb1}">
<Setter Property="FontSize" Value="48"></Setter>
</Style>
</phone:PhoneApplicationPage.Resources>
全局样式
<Application.Resources>
<Style TargetType="TextBlock" x:Key="tbGreen">
<Setter Property="Foreground" Value="Green"></Setter>
</Style>
</Application.Resources>
10.换肤功能
不同样式的资源字典,这些文件都设定为“Resource”
页面中不要在xaml中引入资源字典!,否则会覆盖全局
private static void ApplySkin(ResourceDictionary newStyle)
{
App.Current.Resources.MergedDictionaries.Clear();
App.Current.Resources.MergedDictionaries.Add(newStyle);
}
应用不同的样式
ResourceDictionary newStyle = new ResourceDictionary();
newStyle.Source = new Uri("/PhoneApp1;component/样式换肤/SkinFire.xaml", UriKind.RelativeOrAbsolute);
ApplySkin(newStyle);
将样式加载到全局中
11.资源文件
可以把任意元素声明到Resources,相当于new一个对象,可以通过名字引用,在xaml中通过Key引用
xmlns:system="clr-namespace:System;assembly=mscorlib"
<phone:PhoneApplicationPage.Resources>
<SolidColorBrush Color="Red" x:Key="scb"></SolidColorBrush>
<system:String x:Key="str">3</system:String>
</phone:PhoneApplicationPage.Resources>
<Button Foreground="{StaticResource scb}" Content="aa"></Button>
<Button Content="{StaticResource str}"></Button>
读取资源文件中的元素:string msg = (string)App.Current.Resources["key"];