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

C#?WPF編程之Application類的使用詳解

 更新時間:2024年04月02日 15:31:42   作者:SongYuLong的博客  
每個運行中的WPF應用程序都由System.Windows.Application類的一個實例來表示,該類跟蹤在應用程序中打開的所有窗口,決定何時關閉應用程序,下面就跟隨小編一起來深入了解下Application類的使用吧

應用程序的生命周期

在WPF中,應用程序會經歷簡單的生命周期。本質上,Visual Studio為Application類使用的模型與用于窗口的模型相同。起點是XAML模板,默認情況下該模板命名為App.xaml:

創(chuàng)建Application對象

<Application x:Class="WpfApp3.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp3"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
         
    </Application.Resources>
</Application>

StartupUri屬性來確定主窗口的XAML文檔。因此不需要代碼顯式地實例化窗口,XAML解析器自動完成這項工作。自動生成的部分在項目中是不可見的,看起來如下:

using System;
using System.Windows;
public partial class App:Application
{
    [STAThread()]
    public static void Main()
    {
        WpfApp3.App app = new WpfApp3.App();
        app.InitializeComponent();
        app.Run();
    }
    
    public void InitializeComponent()
    {
        this.StartupUri = new Uri("Window1.xaml", System.UriKind.Relative);
    }
    
}

應用程序的關閉方式

通常,只要有窗口未關閉,Application類就保持應用程序處于有效狀態(tài)。

可通過Appliaction.ShutdownMode屬性修改關閉模式,枚舉值:

  • OnLastWindowClose:默認行為,只少有一個窗口存在,應用程序就保持運行狀態(tài)。
  • OnMainWindowClose:傳統(tǒng)方式,只要主窗口還處于打開狀態(tài),應用程序就保持運行狀態(tài)。
  • OnExplictitShutdown:除非調用Application.Shutdown()方法,否則應用程序不會結束。

App.xaml文件中添加ShutdownMode=“OnMainWindowClose”

<Application x:Class="WpfApp3.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp3"
             StartupUri="MainWindow.xaml"
             ShutdownMode="OnMainWindowClose">
    <Application.Resources>
         
    </Application.Resources>
</Application>

應用程序事件

App.xaml.cs文件里可添加代碼來處理應用程序事件。

應用程序事件:

  • Startup:該事件在調用Application.Run()方法之后,并且在主窗口顯示之前。
  • Exit:該事件在應用程序關閉時,并在Run()方法即將返回之前發(fā)生。
  • SessionEnding:該事件在Window對話結束時發(fā)生。
  • Activated:當激活應用程序中的窗口是發(fā)生該事件。
  • Deactivated:當取消激活用用程序中的窗口時發(fā)生該事件。
  • DispatcherUnhandledException:在應用程序中的任何位置,只要發(fā)送未處理的異常,就會發(fā)生該事件。
  • 處理事件兩種方法:
  • 關聯(lián)事件處理程序;

重寫相應的受保護方法。

關聯(lián)事件處理程序,如xmal中添加事件處理DispatcherUnhandledException=“Application_DispatcherUnhandledException”

App.xaml

<Application x:Class="WpfApp3.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp3"
             StartupUri="MainWindow.xaml"
             DispatcherUnhandledException="Application_DispatcherUnhandledException">
    <Application.Resources>
         
    </Application.Resources>
</Application>

App.xaml.cs:

private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{

}

代碼重寫事件方法窗口事件:

using System.Configuration;
using System.Data;
using System.Windows;

namespace WpfApp3
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {

        private bool unsaveDate = false;

        public bool UnsaveDate 
        {
            get { return unsaveDate; }
            set { unsaveDate = value; }
        }

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            UnsaveDate = true;
        }

        protected override void OnSessionEnding(SessionEndingCancelEventArgs e)
        {
            base.OnSessionEnding(e);

            if (UnsaveDate)
            { 
                e.Cancel = true;
                MessageBox.Show("測試:"+e.ReasonSessionEnding.ToString());
            }
        }        
    }
}

Application類的任務

顯示初始界面

WPF應用程序的運行速度快,但并不能在瞬間啟動。第一次啟動應用程序時,會有一些延遲,因為公共語言運行時(Common Language Runtime,CLR)首先需要初始化.NET環(huán)境,然后啟動應用程序。通常這一延時時間很短。但如果具有更耗時的初始化步驟,可使用WPF提供的簡單初始界面特性,添加加初始界面的方法:

  • 為項目添加圖像文件(.bmp,.png,.jpg文件)。
  • 在Solution Explorer中選擇圖像文件。
  • 將Build Action修改為SplashScreen。

下次運行應用程序時,圖像會立即在屏幕中央顯示出來。當添加初始界面時,WPF編譯器為自動生成的App.cs文件添加與下面類似的代碼:

SplashScreen splashScreen = new SplashScreen("splashScreenImage.png");
splashScreen.show(true);
MyApplication.App app = new MyApplication.App();
app.InitializeComponent();
app.Run();

處理命令行參數

為處理命令行參數,需要響應Application.Startup事件。命令行參數是通過StartupEventArgs.Args屬性作為字符串數組提供的。

例如,假定希望加載文檔,文檔名作為命令行參數傳遞。通過代碼實例化主窗口。

public partial class App : Application
{
    private static void App_Startup(object sender, StartupEventArgs e)
    {
        FileViewer win = new FileViewer();
        if (e.Args.Length > 0)
        {
            string file = e.Args[0];
            if (System.IO.File.Exists(file))
            {
                win.LoadFile(file);
            }
            else
            {
                
            }
        }
    }
}

訪問當前Application對象

通過靜態(tài)的Application.Current屬性,可在應用程序的任何位置獲取當前應用程序的實例,從而在窗口之間進行基本交互,任何窗口都可以訪問當前Application對象,并通過Application對象獲取主窗口的引用:

Window main = Application.Current.MainWindow;
MessageBox.Show("The main window is " + main.Title);

如果希望訪問在自定義窗口類中添加的任意方法、屬性或事件,需要將窗口對象轉裝換為正確類型。

MainWindow main = (MainWindow)Application.Current.MainWindow;
main.DoSomething();

在窗口中還可以檢查Application.Windows集合的內容:

foreach( Window window in Application.Current.Windows)
{
MessageBox.Show(window.Title + " is open.");
}

在窗口之間進行交互

應用程序類還可以很好地達到另一個目的:保存重要窗口的引用,使一個窗口可訪問另一個窗口。

窗口分為模態(tài)和非模態(tài):

  • 模態(tài)窗口:模態(tài)窗口會中斷應用程序流,直到窗口關閉為止。
  • 非模態(tài)窗口:非模態(tài)窗口則不中斷應用程序流。

示例,每個文檔窗口由名為Document的類實例表示:

public partial class App : Application
{
    private List<Document> documents = new List<Document>();
    public List<Document> Documents
    {
        get {return documents};
        set {documents = value;}
    }
}

下面是響應按鈕點擊事件的處理程序:

private void cmdCreate_Click(object sender, RouteEventArgs e)
{
    Document doc = new Document();
    doc.Owner = this;
    doc.Show();
    ((App)Application.Current).Documents.Add(doc);
}

程序集資源

WPF應用程序中的程序集資源與其他.NET應用程序中的程序集資源在本質上是相同的?;靖拍钍菫轫椖刻砑游募?,從二Visual Studio可將其嵌入到編譯過的應用程序的EXE或DLL文件中。

添加資源

通過向項目添加文件,并在Properties窗口中將其Build Action屬性設置為Resource來添加資源。

為成功地使用程序集資源,未必注意一下兩點:

  • 不能將Build Action屬性錯誤地設置為Embedded Resource。
  • 不要在Project Properties窗口中使用Resource選項卡。

檢索資源

可以采用多種方法來使用資源。

低級方法是檢索封裝數據的StreamResourceInfo對象,然后決定如何使用該對象。

StreamResourceInfo sri = Application.GetResourceStream(new Uri(“images/winter.jpg”, UriKind.Relative));

XMAL:

<\Image Source=“Images/1.jpg”></Image>

使用BitmapImage對象,該對象使用URI確定希望顯示的圖像位置。

絕對路徑:

img.Source = new BitmapImage(new Uri((@“d:\Img\jpgs\2.jpg”));

相對路徑:

img.Source = new BitmapImage(new Uri(“images/6.jpg”, UriKind.Relative));

pack URI

WPF使用pack URI語法尋址編譯個的資源。使用相對URI來引用資源

內容文件

當嵌入式文件作為資源時,會將文件放到編譯過的程序集中,并且可以確保文件總是可用的。

如下情況不適合使用這種方法:

  • 希望改變資源文件,有不想重新編譯應用程序;
  • 資源文件非常大;
  • 資源文件是可選的,并且可以不隨程序集一起部署;
  • 資源是聲音文件(WPF聲音類不支持程序集資源);

WPF為程序集添加了AssemblyAssociatedContentFile特性,聲明每個內容文件的存在。

為項目添加音頻文件:

在Solution Explorer中選擇該文件,并在Properties中將Build Action屬性改為Content。

<\MediaElement Name=“Sound” Source=“Sounds/1.wav” LoadeBehavior=“Manual”></MediaElement>

到此這篇關于C# WPF編程之Application類的使用詳解的文章就介紹到這了,更多相關C# Application類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • c#獲得目標服務器中所有數據庫名、表名、列名的實現(xiàn)代碼

    c#獲得目標服務器中所有數據庫名、表名、列名的實現(xiàn)代碼

    這篇文章主要介紹了c#獲得目標服務器中所有數據庫名、表名、列名的方法,需要的朋友可以參考下
    2014-05-05
  • asp.net中調用oracle存儲過程的方法

    asp.net中調用oracle存儲過程的方法

    存儲過程是在大型數據庫系統(tǒng)中,一組為了完成特定功能的SQL 語句集,存儲在數據庫中經過第一次編譯后再次調用不需要再次編譯,用戶通過指定存儲過程的名字并給出參數來執(zhí)行它,下面給大家介紹下asp.net中調用oracle存儲過程的方法,需要的朋友可以參考下
    2015-08-08
  • C#中的for和foreach的性能對比

    C#中的for和foreach的性能對比

    這篇文章主要介紹了C#中的for和foreach的性能對比,在C#中,for和foreach是兩種常用的循環(huán)結構,用于迭代集合中的元素,盡管它們在功能上相似,但它們在性能、空間效率和垃圾回收(GC)方面有一些區(qū)別,需要的朋友可以參考下
    2023-10-10
  • C# 中的 LINQ語法和類型(兩種語法)

    C# 中的 LINQ語法和類型(兩種語法)

    LINQ 允許開發(fā)人員直接在 C# 代碼中編寫查詢,從而更輕松地操作和轉換數據,這篇文章主要介紹了C# 中的 LINQ:語法和類型,需要的朋友可以參考下
    2024-06-06
  • C#中Abstract 、Virtual和Override的使用及區(qū)別

    C#中Abstract 、Virtual和Override的使用及區(qū)別

    C#中virtual,abstract,override用于方法重載,子類覆蓋了父類的相同方法,父類中的實現(xiàn)不可能再被外面調用。本文給大家重點介紹C#中Abstract 、Virtual和Override的使用及區(qū)別,需要的朋友參考下吧
    2021-06-06
  • C#中Timer實現(xiàn)Tick使用精度的問題

    C#中Timer實現(xiàn)Tick使用精度的問題

    這篇文章主要介紹了C#中Timer實現(xiàn)Tick使用精度的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 關于C# 4.0新特性“缺省參數”的實現(xiàn)詳解

    關于C# 4.0新特性“缺省參數”的實現(xiàn)詳解

    這篇文章主要給大家介紹了關于C# 4.0新特性“缺省參數”的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家學習或者使用C# 4.0具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-06-06
  • 詳解c#中Array,ArrayList與List<T>的區(qū)別、共性與相互轉換

    詳解c#中Array,ArrayList與List<T>的區(qū)別、共性與相互轉換

    本文詳細講解了c#中Array,ArrayList與List<T>的區(qū)別、共性與相互轉換,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C#?wpf?通過HwndHost渲染視頻的實現(xiàn)方法

    C#?wpf?通過HwndHost渲染視頻的實現(xiàn)方法

    日常開發(fā)中,特別是音視頻開發(fā),需要在界面上渲染視頻,比如制作一個播放器、或者視頻編輯工具、以及視頻會議客戶端。通常拿到的是像素格式數據,此時需要渲染到wpf窗口上就需要一定的方法,本文介紹一種通過hwnd渲染的方法,控件既能提供hwnd又能嵌入wpf窗口里
    2021-11-11
  • C#實現(xiàn)獲取文件夾大小的方法

    C#實現(xiàn)獲取文件夾大小的方法

    這篇文章主要介紹了C#實現(xiàn)獲取文件夾大小的方法,實例分析了兩種獲取方法,涉及C#針對文件夾操作的相關技巧,需要的朋友可以參考下
    2015-05-05

最新評論

内乡县| 常宁市| 永城市| 德保县| 乌审旗| 广丰县| 贺州市| 大英县| 巨野县| 天峨县| 河池市| 宜春市| 兴和县| 勐海县| 赫章县| 大埔县| 青川县| 太仓市| 东兴市| 惠州市| 新丰县| 梁山县| 淮安市| 陆良县| 天镇县| 凤翔县| 焦作市| 大石桥市| 牡丹江市| 天祝| 剑川县| 闵行区| 石景山区| 安宁市| 邳州市| 利辛县| 耒阳市| 临桂县| 隆林| 茶陵县| 广丰县|