?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=(程序集名稱)”;