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; // 需要定义事件 event
private 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=(程序集名称)”;