WPF简单入门总结
WPF简单总结
最近看了点关于WPF的东西,总结了点点入门的东西。
XAML语法基础
1、 定义样式
|
<Window.Resources><!--窗体资源的定义--> <!--定义风格--> <Style x:Key="myStyle1" TargetType="Button"> <Style.Setters><!--表示的是集合--> <Setter Property="Background" Value="Blue" ></Setter> <Setter Property="Content"> <Setter.Value> <Image Source="/demo1_1;component/Images/1.bmp" ></Image> </Setter.Value> </Setter> <Setter Property="FontSize" Value="20"> </Setter> <Setter Property="FontFamily" Value="Times New Roman"> </Setter> </Style.Setters> </Style> </Window.Resources> |
2、 运用样式
|
<Button FontSize="20" Click="button1_Click" Margin="188,86,192,113" Style="{StaticResource myStyle1}"></Button> |
3、 或者在App.xaml中加入一样可以运用在文件中
|
<Application.Resources> <Style x:Key="appStyle1" TargetType="Button"> <Style.Setters> <!--表示的是集合--> <Setter Property="Background" Value="Blue" ></Setter> </Style.Setters> </Style> </Application.Resources> |
4、 打开文件对话框
|
OpenFileDialog ofd=new OpenFileDialog(); String filename=ofd.FileName;//打开的文件名 ofd.Filter=”文本文件|*.txt|图片|*.jpg|视频|*.avi”;//筛选打开的文件名 |
5、 保存文件对话框
|
SaveFileDialog sfg=new SaveFileDialog(); Sfg.Filter=”文本文件|*.txt|word文档|*.doc”; If(sfd.ShowDialog()==true) { MessageBox.Show(sfd.FileName) } |
几种常见的布局
1、 Grid 定义由行和列灵活的网格区域
下面为四行三列的网格布局
|
<Grid VerticalAlignment="Top" HorizontalAlignment="Left" ShowGridLines="True" Width="250" Height="100"> <Grid.ColumnDefinitions> //列集合 <ColumnDefinition /> //一列 <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> //行集合 <RowDefinition /> //一行 <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> 创建控件并放入指定的网格位置 <TextBlock FontSize="20" FontWeight="Bold" Grid.ColumnSpan="3" Grid.Row="0">2005 Products Shipped</TextBlock> <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="0">Quarter 1</TextBlock> <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="1">Quarter 2</TextBlock> <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="2">Quarter 3</TextBlock> <TextBlock Grid.Row="2" Grid.Column="0">50000</TextBlock> <TextBlock Grid.Row="2" Grid.Column="1">100000</TextBlock> <TextBlock Grid.Row="2" Grid.Column="2">150000</TextBlock> <TextBlock FontSize="16" FontWeight="Bold" Grid.ColumnSpan="3" Grid.Row="3">Total Units: 300000</TextBlock> </Grid> |
2、 StackPanel 将子元素排列成一行(科研水平或垂直方向
|
<StackPanel> <Border Background="SkyBlue" BorderBrush="Black" BorderThickness="1"> <TextBlock Foreground="Black" FontSize="12">Stacked Item #1</TextBlock> </Border> <Border Width="400" Background="CadetBlue" BorderBrush="Black" BorderThickness="1"> <TextBlock Foreground="Black" FontSize="14">Stacked Item #2</TextBlock> </Border> <Border Background="LightGoldenRodYellow" BorderBrush="Black" BorderThickness="1"> <TextBlock Foreground="Black" FontSize="16">Stacked Item #3</TextBlock> </Border> <Border Width="200" Background="PaleGreen" BorderBrush="Black" BorderThickness="1"> <TextBlock Foreground="Black" FontSize="18">Stacked Item #4</TextBlock> </Border> <Border Background="White" BorderBrush="Black" BorderThickness="1"> <TextBlock Foreground="Black" FontSize="20">Stacked Item #5</TextBlock> </Border> </StackPanel> |
3、 WrapPanel从左至右按顺序位置定位子元素
|
<Border HorizontalAlignment="Left" VerticalAlignment="Top" BorderBrush="Black" BorderThickness="2"> <WrapPanel Background="LightBlue" Width="200" Height="100"> <Button Width="200">Button 1</Button> <Button>Button 2</Button> <Button>Button 3</Button> <Button>Button 4</Button> </WrapPanel> </Border> |
4、 Canvas 画布,随意布局
|
<Canvas Background="LightSteelBlue"> <TextBlock FontSize="14" Canvas.Top="100" Canvas.Left="10">Hello World!</TextBlock> <TextBlock FontSize="22" Canvas.Top="200" Canvas.Left="75">Isn't absolute positioning handy?</TextBlock> </Canvas> |
数据绑定
1、 控件与控件之间的绑定
|
<Slider Name="mySlider" Minimum="0.5" Maximum="1" Background="PaleGreen" LargeChange="0.1" Width="300"></Slider> <TextBox Name="myNum" Width="100" Text="{Binding ElementName=mySlider,Path=Value,Mode=TwoWay}" ></TextBox> |
这为把滑块中的值绑定到文本框中显示。则文本框的文本显示为滑块的值
格式为:
{Binding ElementName=”绑定数据源的控件的Name” Path=绑定数据源显示的Value,Mode=绑定显示模式}
2、 前台直接绑定后台实体(User.cs)的值
|
namespace WpfDataBinding { public class User { private string _userName; public string UserName { get { return _userName; } set { _userName = value; } } private int _userAge; public int UserAge { get { return _userAge; } set { _userAge = value; } } private string _userPhoto; public string UserPhoto { get { return _userPhoto; } set { _userPhoto = value; } } } } |
a) 第一步 首先在前段引入命名空间
|
xmlns:myspace="clr-namespace:WpfDataBinding" |
Xmls:变量名=”clr-namespace:自己命名控件名”
b) 第二步 indow.Resource实例化User类
|
<Window.Resources> <myspace:User x:Key="myUser" UserName="haha" UserAge='12' UserPhoto="123456"></myspace:User> </Window.Resources> |
<引如控件变量名:类名 x.Key=”数据源名” 属性初始化>
c) 第三步 通过属性DataContext绑定数据源
|
<StackPanel Orientation="Vertical" DataContext="{StaticResource ResourceKey=myUser}"> <!--把资源里的数据绑定到控件中 DataContext数据上下文 引入刚刚引入的实体类--> <WrapPanel><TextBox Text="{Binding Path=UserName}" Width="150"></TextBox> </WrapPanel></StackPanel> |
在父节点或子节点的DataContext进行数据源的绑定:控件直接可以使用Text="{Binding Path=属性名" Width="150">
集合类的数据绑定
1、 ListBox集合
a) 第一步:
|
<ListBox x:Name="myListBox"> <ListBox.Resources> <!--定义模板的样式--> </ListBox.Resources> <ListBox.ItemTemplate><!--数据项定义模板--> <DataTemplate><!--数据呈现--> <StackPanel> <StackPanel.Resources> <Style TargetType="TextBlock"> <Setter Property="FontSize" Value="28"></Setter> </Style> <Style TargetType="Image"> <Setter Property="Width" Value="100"></Setter> <Setter Property="Height" Value="100"></Setter> </Style> </StackPanel.Resources> <Image Width="100" Height="100" Source="{Binding Path=UserPhoto}"></Image> <TextBlock Text="{Binding Path=UserName}"></TextBlock> <TextBlock Text="{Binding Path=UserAge}"></TextBlock> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> |
b) 第二步 在后台进行绑定
|
myListBox.ItemsSource = list; |
c) 第三步
|
class UserList : ObservableCollection<User> //必须使用ObservableCollection集合 |
属性绑定
属性值的改变,直接发送给客户端更改显示属性值
实现接口:INotifyPropertyChanged
|
public string UserName { get { return _userName; } set { _userName = value; NotifyPropertyEventHandler("UserName"); } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyEventHandler(string info) { if (PropertyChanged != null) { PropertyChanged(this,new PropertyChangedEventArgs(info)); } } |
图形变换Transform 类
1、 缩放
|
<Image Source="001.jpg" Width="100" Canvas.Left="322" Canvas.Top="99"> <Image.RenderTransform> <ScaleTransform CenterX="0" CenterY="0" ScaleX="0.5" ScaleY="0.5"></ScaleTransform> </Image.RenderTransform> </Image> |
2、 使元素扭曲
|
<Image Source="001.jpg" Width="83" Canvas.Left="117" Canvas.Top="158" Height="109"> <Image.RenderTransform> <SkewTransform AngleX="6" AngleY="6" CenterX="0" CenterY="0"></SkewTransform> </Image.RenderTransform> </Image> |
3、 平移元素
|
<Image Source="001.jpg" Width="100" Canvas.Left="15" Canvas.Top="-57"> <Image.RenderTransform> <TranslateTransform X="200" Y="200"></TranslateTransform> </Image.RenderTransform> </Image> |
4、 使元素就地旋转
|
<Image Source="001.jpg" Width="100" Canvas.Left="95" Canvas.Top="-8"> <Image.RenderTransform> <RotateTransform CenterX="0" CenterY="0" Angle="30"></RotateTransform> </Image.RenderTransform> </Image> |
5、 多种一起用
|
<Image Source="001.jpg" Width="83" Canvas.Left="55" Canvas.Top="212" Height="109"> <Image.RenderTransform> <TransformGroup> <ScaleTransform CenterX="0" CenterY="0" ScaleX="0.5" ScaleY="0.5"></ScaleTransform> <SkewTransform AngleX="6" AngleY="6" CenterX="0" CenterY="0"></SkewTransform> <RotateTransform CenterX="0" CenterY="0" Angle="30"></RotateTransform> </TransformGroup> </Image.RenderTransform> </Image> |
简单动画
1、 创建 DoubleAnimation
|
<Canvas> <Rectangle Name="MyRectangle" Width="100" Height="100" Margin="200 0 0 0"></Rectangle> <!--在xaml界面中实现动画--> <!--第一步,明确在什么时候(什么时候触发动画的执行)--> <Canvas.Triggers> <EventTrigger RoutedEvent="Rectangle.Loaded"> <!--具体事件执行代码--> <EventTrigger.Actions> <!--故事版--> <BeginStoryboard> <!--所以的动画都的放在Storyboard里面--> <Storyboard> <!--必须设置:TargetName ; TargetProperty ;--> <DoubleAnimation Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Width” From="1.0" To="0.0" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" /> </Storyboard> </BeginStoryboard></EventTrigger.Actions></EventTrigger> </Canvas.Triggers></Canvas> |
2、 创建 ColorAnimation
|
<ColorAnimation Storyboard.TargetName="MyAnimatedBrush" Storyboard.TargetProperty="Color" To="YellowGreen" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever"/> |
注:TargetName 目标颜色笔刷的名字
TargetProperty 属性(要修改的)
To Form
Duration 动画持续的时间
AutoReverse 自动放回
RepeatBehavior 重复的方式 forever 永远
3、 创建PointAnimation
|
<PointAnimation Storyboard.TargetName="myRadialGradientBrush" Storyboard.TargetProperty="GradientOrigin" From="0.0,0.5" To="0.5,0.5" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" /> |
简单笔刷
1、 线性渐变
|
<Rectangle Width="200" Height="100"> <Rectangle.Fill> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="Yellow" Offset="0.0" /> <GradientStop Color="Red" Offset="0.25" /> <GradientStop Color="Blue" Offset="0.75" /> <GradientStop Color="LimeGreen" Offset="1.0" /> </LinearGradientBrush> </Rectangle.Fill> </Rectangle> |
2、 径向渐变
|
<Rectangle Width="200" Height="100"> <Rectangle.Fill> <RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5"> <RadialGradientBrush.GradientStops> <GradientStop Color="Yellow" Offset="0" /> <GradientStop Color="Red" Offset="0.25" /> <GradientStop Color="Blue" Offset="0.75" /> <GradientStop Color="LimeGreen" Offset="1" /> </RadialGradientBrush.GradientStops> </RadialGradientBrush> </Rectangle.Fill> </Rectangle> |
WPF简单入门总结的更多相关文章
- WPF自学入门(六)WPF带标题的内容控件简单介绍
在WPF自学入门(二)WPF-XAML布局控件的文章中分别介绍StackPanel,WarpPanel,DockPanel,Grid,Canvas五种布局容器的使用,可以让我们大致了解容器可以使用在什 ...
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍
WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...
- WPF快速入门系列(1)——WPF布局概览
一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中 ...
- WPF从入门到放弃系列第二章 XAML
本文是作者学习WPF从入门到放弃过程中的一些总结,主要内容都是对学习过程中拜读的文章的整理归纳. 参考资料 XAML 概述 (WPF):https://msdn.microsoft.com/zh-cn ...
- WPF自学入门(十一)WPF MVVM模式Command命令
在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正如上一篇文章中在开始说的,MVVM的目的是为了最大限度地降低了 ...
- 用IntelliJ IDEA创建Gradle项目简单入门
Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...
- [原创]MYSQL的简单入门
MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...
- Okio 1.9简单入门
Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...
- emacs最简单入门,只要10分钟
macs最简单入门,只要10分钟 windwiny @2013 无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...
随机推荐
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
floyd解法 今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂. 模版题,纯练打字... HDU 1874: #include <cstdio> #define MAXN ...
- 在vs环境中跑动sift特征提取(原理部分)
/* 如果给两张图片,中间有相似点.要求做匹配.怎么做.我现在能讲么? 比如给了两幅图片,先求出sift点. 尺度空间极值检测.高斯模糊 关键点定位 关键点方向确定 关键点描述 kdtre ...
- display:none与visible:hidden区别
if(list.style.display=='none'){ list.style.display='block'; }else{ ...
- css3 transition 实现图片放大缩小
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mysql中文乱码的一点理解
我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B. 如果你也遇到了这个问题,咱 ...
- Jersey(1.19.1) - Life-cycle of Root Resource Classes
By default the life-cycle of root resource classes is per-request, namely that a new instance of a r ...
- Linux 命令 - uniq: 通知或忽略重复行
给定一个已排好序的文件,uniq 会删除重复行并将结果输出到标准输出中.uniq 通常与 sort 结合使用以删除 sort 输出内容中的重复行. 命令格式 uniq [OPTION]... [INP ...
- SQL获取刚插入的记录的自动增长列ID的值
假设表结构如下: CREATE TABLE TestTable ( id int identity, CreatedDate datetime ) SQL2005获得新增行的自动增长列的语句如下: i ...
- Contoso 大学 - 3 - 排序、过滤及分页
原文 Contoso 大学 - 3 - 排序.过滤及分页 目录 Contoso 大学 - 使用 EF Code First 创建 MVC 应用 原文地址:http://www.asp.net/mvc/ ...
- linux中FTP自动备份VPS脚本
服务器多了,网站也越来越多,总觉得不整个备份心里放不下心,并且有好几次rm的操作失误,造成难以挽回的损失.并且大多数的VPS提供商是不提供自动备份功能或者此功能收费价格略高.所以自己还是有必要把这个工 ...