最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# WPF 建立無邊框(標(biāo)題欄)的登錄窗口的示例

 更新時(shí)間:2020年12月15日 08:49:55   作者:沐汐Vicky  
這篇文章主要介紹了C# WPF 建立無邊框(標(biāo)題欄)的登錄窗口的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

前言:筆者最近用c#寫WPF做了一個(gè)項(xiàng)目,此前未曾做過完整的WPF項(xiàng)目,算是一邊學(xué)一邊用,網(wǎng)上搜了不少資料,效率當(dāng)然是不敢恭維的,有時(shí)會(huì)在一些很簡單的問題上糾結(jié)很長時(shí)間,血與淚的教訓(xùn)可不少。
不過,正如電視劇某榜里的一句話:既然我活了下來,就不會(huì)白白活著!筆者怎么也算掙扎過了,有些經(jīng)驗(yàn)與教訓(xùn)可以分享,趁著記憶深刻總結(jié)寫下來。希望后來者少走彎路,提高工作效率。如果有寫得不好的地方,希望讀者能夠指正,一起進(jìn)步!
---------------------------------

今天先從登錄窗口說起:

1. 效果圖

先來看看效果圖,簡潔,風(fēng)格統(tǒng)一,完全不會(huì)被Window操作系統(tǒng)主題的影響。

2. 實(shí)現(xiàn)方法

WPF做這樣的窗口非常簡單,只有需在窗口設(shè)計(jì)中設(shè)置兩個(gè)屬性,一個(gè)是AllowsTransparency, 設(shè)置為 Ture;  一個(gè)是 WindowStyle, 設(shè)置為 None。

注:是Window的屬性,不要選中其他的控件。

另外,如果AllowsTransparency="True",那么 WindowStyle只能為 None, VS2015 已經(jīng)做到連動(dòng)設(shè)置,只要勾選AllowsTransparency,后一個(gè)也跟著變了。但 VS2008 還是需要用戶分別設(shè)置,不然會(huì)報(bào)錯(cuò)。

還有一個(gè)問題不得不提,AllowsTransparency="True" 之后就無法使用 WindowsFormsHost控件了,因?yàn)榫退阌昧?,WFH里的任何控件也是透明無法顯示出來的,比如ReportViewer!

3.窗口任意空白地方實(shí)現(xiàn)鼠標(biāo)拖拽

標(biāo)題欄上有最大化最小化和關(guān)閉的按鈕,其中在登錄窗口我們一般是不會(huì)使用最大化按鈕的??墒遣坏貌徽f,標(biāo)題欄還有一個(gè)很實(shí)用的作用,就是可以拖拽整個(gè)窗口,用戶只要單擊標(biāo)題欄不放,就可以拖到桌面的任何地方。如今把標(biāo)題欄隱藏之后,該如何彌補(bǔ)呢?

為窗口添加一個(gè) MouseLeftButtonDown 的事件,代碼如下:

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

這樣就OK了!

注:網(wǎng)上有些示例里,沒有用 try{}catch{},而只有一行代碼

this.DragMove();

如果在登錄窗口,只有那么幾個(gè)控件和事件的話,應(yīng)該也是無大礙的。

在這里筆者有個(gè)小小的經(jīng)驗(yàn)必須分享一下:

由于在主界面里也使用了這種無標(biāo)題欄的窗口,鼠標(biāo)在Gridview上操作時(shí),經(jīng)常會(huì)引發(fā)異常崩潰。

所以筆者認(rèn)為最好加 try...catch... 避免異常,哪怕是登錄窗口也不例外。

4. 輸入密碼后按回車登錄

很多網(wǎng)站會(huì)注意這種情況,輸入密碼后回車,系統(tǒng)就可以登錄,這就是良好的用戶體驗(yàn)。(當(dāng)然,也有些網(wǎng)站不注意用戶體驗(yàn),用戶必須用鼠標(biāo)去點(diǎn)擊登錄的)

其實(shí)在密碼框添加一個(gè) KeyDown 事件就可以

private void txt_Pwd_KeyDown(object sender, KeyEventArgs e)
    {
      switch (e.Key)
      {
        case Key.Enter:
          btn_login_Click(btn_login, null);
          break;

        default:
          break;
      }
    }

So easy !

5. 按Enter(回車)跳到下一控件

提到回車登錄,順便提一下,有些人不喜歡輸入用戶名后,又要用鼠標(biāo)移到密碼框,又鍵盤又鼠標(biāo),比如筆者。

事實(shí)上 Tab鍵 可以讓用戶在比較簡單的界面擺脫鼠標(biāo),不過要注意在窗口設(shè)計(jì)時(shí)調(diào)好控件的 TabIndex 順序。

當(dāng)然在此基礎(chǔ)上也可以加一個(gè) Enter 設(shè)置的功能,只要在后臺(tái)代碼重寫窗口的 OnKeyDown 事件,如下:

//按下回車后跳入下一個(gè)控件
    protected override void OnKeyDown(KeyEventArgs e)
    {
      if (e.Key == Key.Enter)
      {
        // MoveFocus takes a TraveralReqest as its argument.
        TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);

        // Gets the element with keyboard focus.
        UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;

        // Change keyboard focus.
        if (elementWithFocus != null)
        {
          elementWithFocus.MoveFocus(request);
        }
        e.Handled = true;
      }
      base.OnKeyDown(e);
    }

6. 運(yùn)行時(shí)打開登錄窗口

登錄窗口畢竟不是主窗口,登錄后要關(guān)閉的,所以Startup的路徑不是登錄窗口,但登錄的時(shí)候是不能打開主窗口的,如果用戶關(guān)閉登錄窗口,退出程序。

實(shí)現(xiàn)方法:

項(xiàng)目下有一個(gè)App.xaml文件,Startup 指向主窗口的路徑,然后打開后臺(tái)代碼 App.xaml.cs,重寫OnStartup事件,判斷一下登錄窗口的 DialogResult 如果返回ture,就正常打開主窗口,如果為 false,則關(guān)閉整個(gè)程序。代碼:

//打開登錄窗口,成功后進(jìn)入主窗口
    protected override void OnStartup(StartupEventArgs e)
    {
      try
      {
        OneInstanceOnly();//僅運(yùn)行一個(gè)實(shí)例
//#if !DEBUG
        // 運(yùn)行登錄窗口
        Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;
        LoginWindow window = new LoginWindow();
        bool? dialogResult = window.ShowDialog();
        if (Utils.IsTrue(dialogResult))
        {
          base.OnStartup(e);
          Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
        }
        else
        {
          this.Shutdown();
        }
//#endif
      }
      catch (Exception ex)
      {
        UIUtils.ShowException(ex);
      }
    }

留意 ShutdownMode 的變化

作者:沐汐 Vicky
出處:http://www.cnblogs.com/EasyInvoice

以上就是C# WPF 建立無邊框(標(biāo)題欄)的登錄窗口的示例的詳細(xì)內(nèi)容,更多關(guān)于c# WPF 建立窗口的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#中通過使用Connection類來實(shí)現(xiàn)打開/關(guān)閉數(shù)據(jù)庫的代碼實(shí)例

    C#中通過使用Connection類來實(shí)現(xiàn)打開/關(guān)閉數(shù)據(jù)庫的代碼實(shí)例

    今天小編就為大家分享一篇關(guān)于C#中通過使用Connection類來實(shí)現(xiàn)打開/關(guān)閉數(shù)據(jù)庫的代碼實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C#判斷某程序是否運(yùn)行的方法

    C#判斷某程序是否運(yùn)行的方法

    這篇文章主要介紹了C#判斷某程序是否運(yùn)行的方法,代碼結(jié)構(gòu)簡單功能實(shí)用,需要的朋友可以參考下
    2014-09-09
  • C#在Unity游戲開發(fā)中進(jìn)行多線程編程的方法

    C#在Unity游戲開發(fā)中進(jìn)行多線程編程的方法

    這篇文章主要介紹了C#在Unity游戲開發(fā)中進(jìn)行多線程編程的方法,文中總結(jié)了Unity中使用多線程的幾種方式以及一款多線程插件的介紹,需要的朋友可以參考下
    2016-04-04
  • C#實(shí)現(xiàn)基于任務(wù)的異步編程模式

    C#實(shí)現(xiàn)基于任務(wù)的異步編程模式

    本文詳細(xì)講解了C#實(shí)現(xiàn)基于任務(wù)的異步編程模式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#的泛型方法解析

    C#的泛型方法解析

    本文講解了C#2.0引入的泛型知識(shí),主要包含泛型類、泛型接口、泛型委托,并且重點(diǎn)講解了泛型方法,已經(jīng)泛型的約束分類。最后給了一些利用泛型方法操作xml的方法。希望對(duì)大家有所幫助
    2016-12-12
  • C# 正則表達(dá)式常用的符號(hào)和模式解析(最新推薦)

    C# 正則表達(dá)式常用的符號(hào)和模式解析(最新推薦)

    這篇文章主要介紹了C# 正則表達(dá)式常用的符號(hào)和模式解析,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • WPF利用LiveCharts實(shí)現(xiàn)動(dòng)態(tài)曲線圖繪制

    WPF利用LiveCharts實(shí)現(xiàn)動(dòng)態(tài)曲線圖繪制

    LiveCharts是一個(gè)比較漂亮的WPF圖表控件,在數(shù)據(jù)發(fā)生變化后,還可以設(shè)置相對(duì)于的動(dòng)畫效果,本文就來利用LiveCharts繪制簡單的動(dòng)態(tài)曲線圖吧
    2023-10-10
  • C#創(chuàng)建IIS虛擬目錄的方法

    C#創(chuàng)建IIS虛擬目錄的方法

    這篇文章主要介紹了C#創(chuàng)建IIS虛擬目錄的方法,實(shí)例分析了C#在IIS服務(wù)器上創(chuàng)建虛擬目錄的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C#實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    C#實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C#實(shí)現(xiàn)給Word每一頁設(shè)置不同文字水印的方法詳解

    C#實(shí)現(xiàn)給Word每一頁設(shè)置不同文字水印的方法詳解

    Word中設(shè)置水印時(shí),可使用預(yù)設(shè)的文字或自定義文字設(shè)置為水印效果,但通常添加水印效果時(shí),會(huì)對(duì)所有頁面都設(shè)置成統(tǒng)一效果。本文以C#?代碼為例,對(duì)Word每一頁設(shè)置不同的文字水印效果作詳細(xì)介紹,感興趣的可以了解一下
    2022-07-07

最新評(píng)論

故城县| 宁乡县| 新丰县| 建德市| 临猗县| 连江县| 巴东县| 侯马市| 神农架林区| 虞城县| 安多县| 沈阳市| 淮安市| 响水县| 阆中市| 云安县| 浦北县| 汉川市| 万年县| 将乐县| 固安县| 忻州市| 西安市| 色达县| 临朐县| 黑山县| 新闻| 大英县| 霍山县| 阜阳市| 保山市| 高碑店市| 丹棱县| 安平县| 綦江县| 莲花县| 曲靖市| 昌吉市| 光泽县| 巢湖市| 卢湾区|