【亂寫代碼坑人系列】ZJUT數據庫大型實驗 - 學生管理系統(四):建立主界面


學生管理系統(四)建立主界面

學生管理系統(一)建立項目

學生管理系統(二)項目規划

學生管理系統(三)建立數據庫和登錄

  在建立模型之前,需要說一些關於WPF 的東西。

  WPF 是MVVM 模式的,可以有效的將UI層與邏輯層分離,關於MVVM 的介紹可以看.NET MVVM設計模式簡介

  在WPF 中,UI層的代碼一般是寫在xaml(可以讀作臟某,逐個字母的念也沒人打你的,看你心情)文件中,XAML 也是標記語言,和HTML 類似,可以完成大部分的UI 繪制以及動畫效果。在xaml 文件下都可以打開xaml.cs 文件,這個就是寫后台C#代碼的地方。和UI 交互的叫做事件,可以給控件注冊事件,來響應各種操作。

  舉個例子,在之前做的登錄界面中,由於將窗口的邊框都隱藏了,導致無法拖動,用戶體驗下降了一萬倍 ,所以現在要給它重新加上拖動事件。

  現在xaml文件中,選中Window 控件(代碼的第一行),在右尖括號之前加上代碼

MouseLeftButtonDown="Window_MouseLeftButtonDown"

  VS 會自動的提示新建事件,然后在.cs 文件中加入事件。進入.cs 能看到最下方多了一個方法,在里面添加代碼

        private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            this.DragMove();
        }

  這樣就完成了拖動的定義,用戶體驗又嘚啵嘚啵的高了。當然這里還涉及到了路由事件的問題,具體的可以看路由事件概述,這里不多說。

 

  接下來開始畫主界面。

 

  WPF 繪圖用的是設備無關尺寸,不會因為分辨率的不同而出現不同的顯示效果。也就是說,都是按着固定的dpi 來進行繪制,如果畫得太大就無法在小屏幕上完整的顯示。

  一般來說我喜歡固定大小,因為這樣方便,而且不會因為用戶改變了窗口的尺寸而影響顯示效果,但是絕大多數情況下,固定窗口尺寸是一種體驗極其差的設定,用戶用起來會呱的一下覺得渾身難受。所以,這里我只會固定最小的寬和高,使元素不會因為窗口太小而被隱藏。

  打開之前的MainWindow.xaml 文件,修改好基本的樣式,添加上關閉與最小化按鈕(最大化要改圖標,太麻煩先不搞)以及一個注銷按鈕,並添加好兩個按鈕的事件。

  

 1     public partial class MainWindow : Window
 2     {
 3         public MainWindow()
 4         {
 5             InitializeComponent();
 6         }
 7 
 8         private void closeButton_Click(object sender, RoutedEventArgs e)
 9         {
10             Application.Current.Shutdown();
11         }
12 
13         private void miniSizButton_Click(object sender, RoutedEventArgs e)
14         {
15             WindowState = WindowState.Minimized;
16         }
17 
18         private void logout_Click(object sender, RoutedEventArgs e)
19         {
20             App.AppDbconnection.Resize();
21             new Login().Show();
22             this.Close();
23         }
24     }

  打開App.xaml.cs,添加對RememberMe 的讀寫,注意set 要設置為private 的,再加上一個Reset 方法來將設置還原為初始狀態。

 1     public class AppDbConnection
 2     {
 3         // Other code ...
 4 
 5         public bool RemeberMe { get; private set; } = Settings.Default.remeberMe;
 6 
 7         public void Reset()
 8         {
 9             Settings.Default.Reset();
10             Settings.Default.Save();
11             AppConnectionString = Settings.Default.connectionString;
12             RemeberMe = false;
13         }
14     }

  回到Login.xaml.cs 中,修改構造方法和登錄事件的代碼。

 1         public Login()
 2         {
 3             InitializeComponent();
 4             if (App.AppDbconnection.RemeberMe)
 5             {
 6                 new MainWindow().Show();
 7                 this.Close();
 8             }
 9         }
10         private void loginButton_Click(object sender, RoutedEventArgs e)
11         {
12             var success = App.AppDbconnection.Login(uidTextBox.Text, pwsTextBox.Password, remeberMeCheckBox.IsChecked ?? false);
13             if (success)
14             {
15                 new MainWindow().Show();
16                 this.Close();
17             }
18             else
19                 MessageBox.Show("Something Wrong!");
20         }

  現在就可以在兩個窗口之間歡快的切換了。

 

  回到MainWindow.xaml,先讓我想想界面該做成什么樣(美工上線(誤

   嗯畫好了

  

  另外在WindowStyle=none 的時候,最大化的窗口會覆蓋任務欄,我查了一下,網上的方法基本都是用來Win32 API,我就偷個懶,只在MainWindow 的構造方法里加個最大高度限定好了。

1         public MainWindow()
2         {
3             InitializeComponent();
4             this.MaxHeight = SystemParameters.WorkArea.Height;
5         }

   最后是github:Github\LzxHahaha\EducationManager

  轉載請注明出處:LzxHahaha-博客園


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM