文章目录
- 前言
- 知识点
- windows资源
- Style:样式
- Setter:属性
- 继承关系
- Trigger:触发器
- WPF层级划分
- 数据绑定
- 声明数据上下文
- 绑定
- 数据模板
前言
图标资源下载 iconfont
知识点
windows资源
- Window.Resources:资源位置声明
- X:Key:资源Id,用于前端的xaml
- X:Name:控件Id,用于后端的程序标记
Style:样式
简单样例
<Window.Resources>
<!--x:Key:资源Id,TargetType:目标控件类型-->
<Style x:Key="DefaultText" TargetType="TextBlock">
<!--Setter 设置属性-->
<Setter Property="FontSize"
Value="50" />
</Style>
</Window.Resources>
Setter:属性
用于设置控件属性
- 可以直接写,也可以在Style.Setters里面写
<Style x:Key="DefaultText" TargetType="TextBlock">
<!--Setter 设置属性-->
<Setter Property="FontSize"
Value="50" />
</Style>
<Style x:Key="DefaultText" TargetType="TextBlock">
<!--Setter 设置属性-->
<Style.Setters>
<Setter Property="FontSize"
Value="50" />
</Style.Setters>
</Style>
使用属性使用Style=“{StaticResource 样式名}”
<TextBlock Text="文字" Style="{StaticResource DefaultText}" />
继承关系
- 一个控件只能有一个Style
- 使用 BasedOn=“{StaticResource 样式}”
- 继承为覆盖关系。重复设置的属性以最后的为主
- 行内样式>Style样式>Style继承样式
Trigger:触发器
但满足一个条件时动态触发,对属性进行修改
<!--x:Key:资源Id,TargetType:目标控件类型-->
<Style x:Key="DefaultText" TargetType="TextBlock">
<!--Setter 设置属性-->
<Style.Setters>
<Setter Property="FontSize" Value="60" />
<Setter Property="Foreground" Value="Green" />
</Style.Setters>
<!--触发器设置-->
<Style.Triggers>
<!--IsMouseOver 即 鼠标悬停时触发-->
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="FontSize" Value="100"/>
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
Property是触发属性,Value是值。即Property=value的时候触发
<Trigger Property="IsMouseOver" Value="True">
常用的触发属性
- IsMouseOver:鼠标悬停
WPF层级划分
数据绑定
声明数据上下文
- 命名规范。默认为xxxViewModel
- 声明ViewModel类。所有绑定属性为public
- 在View里面实例化
事例
namespace WpfApp2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private MainWindowViewModel ViewModel { get; set; }
public MainWindow()
{
ViewModel = new MainWindowViewModel();
this.DataContext = ViewModel;
InitializeComponent();
}
}
public class MainWindowViewModel
{
public string Title { get; set; }
public Person Person { get; set; }
public List<Person> Persons { get; set; }
public MainWindowViewModel()
{
Title = "我是标题";
Person = new Person()
{
Name = "小刘",
Age = 26
};
Persons = new List<Person> {
new Person()
{
Name = "小明",
Age = 26
},
new Person()
{
Name = "小红",
Age = 26
},
new Person()
{
Name = "小兰",
Age = 26
},
};
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
}
绑定
绑定使用{Binding value}的形式
<!--字符串绑定,Title是DataContext的属性-->
<TextBlock Text="{Binding Title}" FontSize="50" />
<!--类绑定-->
<UniformGrid Columns="2"
DataContext="{Binding Person}">
<!--多层板Bind调用-->
<TextBlock Text="{Binding Name}"
FontSize="50" />
<TextBlock Text="{Binding Age}"
FontSize="50" />
</UniformGrid>
数据模板
用于绑定集合类型的数据
<!--数据模板,ItemsSorece绑定集合数据源-->
<ItemsControl ItemsSource="{Binding Persons}">
<!--排版布局-->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<!--内容-->
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--UniformGrid-->
<UniformGrid Columns="2">
<!--多层板Bind调用-->
<TextBlock Text="{Binding Name}"
FontSize="50" />
<TextBlock Text="{Binding Age}"
FontSize="50" />
</UniformGrid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>