1、基础
各模块类型
链接:如何:向 Viewbox 的内容应用 Stretch 属性 - WPF .NET Framework | Microsoft Learn
WPF基础以及事件绑定与数据绑定的情况,,在学习XAML,数据结构以及一个项目学习平台来练手,网络编程与数据通信,空压机啥的项目。;
1、项目文件简介
1.1、AppConfig
配置文件或者数据库,连接字符串,配置信息
2、App.xaml
设置应用程序起始文件,系统级资源。
StartupUri="MainWindow.xaml"> 意思为指定起始文件 为MianWindow.xaml
<Application.Resources> 定义整个WPF应用程序的相关资源。
一个xaml至少包括两个命名空间:默认的;带x前缀的;
3、App.xaml.cs
app.xaml的后台类文件
4、MainWindow.xaml
Window--WPF应用程序界面与xaml设计文件
5、Mainwindow。xaml.cs
xaml窗口文件的后台代码文件
2、事件驱动与数据驱动
1、事件驱动
Winform主要的模式
委托绑定
2.1、数据驱动
WPF主要的模式:数据驱动与绑定
1、MainWindow:
此时需要定义:mainViewModel _mianViewModel=newmainViewModel();
this.DataContext=_mainViewModel;
/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{mainViewModel mainViewModel = new mainViewModel();public MainWindow(){InitializeComponent();// mainViewModel = new mainViewModel(this); // 实例化类,建立连接this.DataContext= mainViewModel; // 实例化绑定连接}private void Button_Click(object sender, RoutedEventArgs e){业务逻辑//mainViewModel.Value = "10";}}
上述是数据绑定的格式
2、mainViewModel
这个定义待绑定的事件:继承INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("具体需要执行的")
public class mainViewModel:INotifyPropertyChanged{// 这种绑定方式//MainWindow _mainWindow;//public mainViewModel(MainWindow mainWindow)//{// _mainWindow = mainWindow;//}public event PropertyChangedEventHandler PropertyChanged; // 需要定义事件 eventprivate string _value="ZHAOXI";public List<ValueModel> ValueList { get; set; }=new List<ValueModel> { new ValueModel{Value = "123", Name="AAA"},new ValueModel{Value="456", Name="BBB"}};public string Value {get { return _value; }set{_value = value;//_mainwindow.tbName.text = value;PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Value")); // 此句放在属性改变后语句之后if (value == "10"){ValueColor= Brushes.Red;// this.txName.Foreground=Brushes.Red;}(this.ValueCommand as CommandBase).RaiseChanged();}}private Brush _valueColor = Brushes.Orange;public Brush ValueColor{get { return _valueColor; }set{_valueColor = value;PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ValueColor"));}}private ICommand valueCommand;// 属性public ICommand ValueCommand { get { if(valueCommand==null){valueCommand = new CommandBase() { DoAction = new Action<object>(ValueCommandAction), DoCanExecute = new Func<object, bool>(CanExecute) };}return valueCommand; }set { valueCommand = value; }}private void ValueCommandAction(object obj){Value = "10";}public bool CanExecute(object obj){return !string.IsNullOrEmpty(Value);}}
3、ICommand
事件点击问题
internal class CommandBase : ICommand{public event EventHandler CanExecuteChanged;//public event EventHandler CanExecuteChanged // 此为事件定义和声明 也可为public event EventHandler CanExexuteChanged;//{// add// {// throw new NotImplementedException();// }// remove// {// throw new NotImplementedException();// }//}public bool CanExecute(object parameter){// 绑定了这个命令的按钮是否能用return DoCanExecute?.Invoke(parameter)==true; /// 当等于true才触发}public void Execute(object parameter) // parameer 这个参数为commandparameter这个控件属性{// 执行逻辑DoAction?.Invoke(parameter);}public Action<object> DoAction { get; set; }public Func<object, bool> DoCanExecute { get; set; }public void RaiseChanged(){CanExecuteChanged?.Invoke(this,new EventArgs());}}
4、ValueModel
此模块是为了在右边显示
public class ValueModel{public string Value { get; set; }public string Name { get; set; }}
上述是数据绑定的格式:
后续包括:布局控件、资源样式、模板、依赖属性、数据绑定、图形、事件与行为、动画等。
2.3、路径
路径:imgPic.Source=new BitmapImage(new Uri("image/12window.png",UriKind.Relative);
URI:(全称:Uniform Resource Identifier)统一资源标识符,它是一个字符串用来标示抽象或物理资源。
Web上可用的每种资源( HTML文档、图像、音频、视频片段、程序等)都由一个通用资源标识符(Uniform Resource Identifier, 简称”URI”)进行定位。
URI的格式也由三部分组成:
- 访问资源的命名机制。
- 存放资源的主机名。
- 资源自身的名称,由路径表示。
相对路径:
.资源的生成操作为Resource
// 相对路径
// 命名控件引入using System.Windows.Media.Imaging;才可以直接用
imgPic.Source = new BitmapImage(new Uri("image/12window.png", UriKind.Relative)); // Source --- ImageSource
绝对路径:
WPF支持两种授权:pack URI方案 application:///和 siteoforigin:///。
但是用siteoforingin替换application时候需要将图片资源的属性面板里的生成操作里将Resource改为内容才可以执行。注意两种方式路径的书写方式
// 授权 指定包含不见得程序包的类型,而路径, 则指定部件在程序包中的位置。
// 绝对路径Absolute
// WPF支持两种授权: pack://application:,,,/和 pack://siteoforigin:,,,//。
// 授权 指定包含不见得程序包的类型,而路径, 则指定部件在程序包中的位置。
// imgPic.Source = new BitmapImage(new Uri("pack://application:,,,/image/12window.png", UriKind.Absolute));imgPic.Source=new BitmapImage(new Uri("pack://application:,,,/image/12window.png",UriKind.Absolute));//imgPic.Source = new BitmapImage(new Uri("pack://siteoforigin:,,,//image//12window.png", UriKind.Absolute));
第三种方式:
// 第三种方式
// 实际读取的是E:\SoftStudy\C#\C#\基础\01WPF基础\02控件_1\bin\Debug路径里的image/12window.png文件,与image里的生成操作方式无关
private void Button_Click(object sender, RoutedEventArgs e){imgPic.Source=new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory+"image/12window.png",UriKind.Absolute));}
3.2、XAML
定义:为定义用户界面创建的一种新的“可扩展的程序标记语言”。
需要命名空间:但是不太一样
下图像网址一样:
xaml命名空间格式:引用命名空间:xmlns:(前缀名)=“命名空间描述”;
自定义类或程序集映射语法:xmlns:(必选前缀)=“clr-namespace:(命名空间); assemly=(程序集名称)”;