WPF Application Sınıfı
26-12-2014
WPF'te uygulama başladığı zaman Application nesnesi yaratılır. Uygulama çalıştığı sürece, çeşitli event'lar meydana gelir. Son olarak, bu nesne destroy edilir ve uygulama kapanmış olur.
Application Nesnesi Yaratmak
Application nesnesi yaratmanın en temel yolu Main() metodu içerisinde manuel olarak yaratmaktır:
Ana window (pencere) kapatıldığı zaman Main metodundaki Application nesnesinin Run metodu çalışır ve bu metodtan sonra yazılmış kodlar da çalıştıktan sonra uygulama kapatılmış olur.
Visual Studio'da bir uygulama yarattığımız zaman, temel Application sınıfı kullanılmaz. Onun yerine Application sınıfından türeyen sınıf kullanılır. Bunun nedeni karmaşık uygulamalarda event handling işlemlerinde ana Application sınıfına event-handling kodlarını ekleyemeyeceğimiz için bu şekilde kullanmak daha mantıklıdır.
Visual Studio'da WPF uygulaması yarattığımız zaman App.xaml isimli bir dosya oluşturulur. Bu dosyanının içeriği aşağıdaki gibidir:
App.xaml isimli dosya ile birlikte App isimli bir sınıf ta yaratılır. Örnekteki TestApplication.App ifadesindeki App bu sınıfı temsil eder. TestApplication ise namespace'i ifade eder. App sınıfı Application sınıfından türetilir. Ayrıca StartupUri attribute'si ile ekranda ilk gösterilecek pencere belirtilir.
Not: Application sınıfı iki parça halinde tanımlanmıştır. Bir parçası compile zamanında otomatik oluşur. Bu kısımda Main metodu bulunmaktadır. İçeriği aşağıdaki kod parçasına benzer:
Eğer bu sınıfın içeriğini görmek isterseniz
Application sınıfının ikinci kısmı App.xaml.cs gibi bir dosyada bulunur. Bu sınıfa uygulamanın event-handling kodlarını yerleştirebiliriz:
Uygulamayı çalıştırdığımız zaman bu kısım otomatik olarak üretilen diğer kısım ile birleştirilir.
Uygulamanın Kapatılması
Uygulamanın nasıl kapatılacağını belirlemek için Application sınıfının ShutdownMode isminde bir property'si vardır. Application nesnesini kendimiz üretiyorsak, ShutdownMode property'i değerini değiştirebiliriz veya App.xaml dosyasına sahipsek, bu dosya içinde değiştirebiliriz. Bu property üç farklı değerden birini alır:
App.xaml dosyasında aşağıdaki gibi kullanabiliriz:
Application Nesnesi Yaratmak
Application nesnesi yaratmanın en temel yolu Main() metodu içerisinde manuel olarak yaratmaktır:
using System; using System.Windows; public class Startup { [STAThread()] static void Main() { // Application nesnesi yaratiliyor Application app = new Application(); // Ana pencere yaratiliyor. Bu pencere ekranda ilk gosterilecek penceredir Window1 win = new Window1(); //Uygulama calistiriliyor app.Run(win); } }
Ana window (pencere) kapatıldığı zaman Main metodundaki Application nesnesinin Run metodu çalışır ve bu metodtan sonra yazılmış kodlar da çalıştıktan sonra uygulama kapatılmış olur.
Visual Studio'da bir uygulama yarattığımız zaman, temel Application sınıfı kullanılmaz. Onun yerine Application sınıfından türeyen sınıf kullanılır. Bunun nedeni karmaşık uygulamalarda event handling işlemlerinde ana Application sınıfına event-handling kodlarını ekleyemeyeceğimiz için bu şekilde kullanmak daha mantıklıdır.
Visual Studio'da WPF uygulaması yarattığımız zaman App.xaml isimli bir dosya oluşturulur. Bu dosyanının içeriği aşağıdaki gibidir:
<Application x:Class="TestApplication.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="Window1.xaml" > </Application>
App.xaml isimli dosya ile birlikte App isimli bir sınıf ta yaratılır. Örnekteki TestApplication.App ifadesindeki App bu sınıfı temsil eder. TestApplication ise namespace'i ifade eder. App sınıfı Application sınıfından türetilir. Ayrıca StartupUri attribute'si ile ekranda ilk gösterilecek pencere belirtilir.
Not: Application sınıfı iki parça halinde tanımlanmıştır. Bir parçası compile zamanında otomatik oluşur. Bu kısımda Main metodu bulunmaktadır. İçeriği aşağıdaki kod parçasına benzer:
using System; using System.Windows; public partial class App : Application { [STAThread()] public static void Main() { TestApplication.App app = new TestApplication.App(); app.InitializeComponent(); app.Run(); } public void InitializeComponent() { this.StartupUri = new Uri("Window1.xaml", System.UriKind.Relative); } }
Eğer bu sınıfın içeriğini görmek isterseniz
obj\Debug
klasörü içerisindeki App.g.cs dosyasına bakabilirsiniz. Application sınıfının ikinci kısmı App.xaml.cs gibi bir dosyada bulunur. Bu sınıfa uygulamanın event-handling kodlarını yerleştirebiliriz:
public partial class App : Application { }
Uygulamayı çalıştırdığımız zaman bu kısım otomatik olarak üretilen diğer kısım ile birleştirilir.
Uygulamanın Kapatılması
Uygulamanın nasıl kapatılacağını belirlemek için Application sınıfının ShutdownMode isminde bir property'si vardır. Application nesnesini kendimiz üretiyorsak, ShutdownMode property'i değerini değiştirebiliriz veya App.xaml dosyasına sahipsek, bu dosya içinde değiştirebiliriz. Bu property üç farklı değerden birini alır:
OnLastWindowClose | Varsayılan değerdir. Bir pencere kalana kadar uygulama çalışır. Eğer tüm pencereler kapatılırsa uygulama kapatılmış olur. |
OnMainWindowClose | App.xaml dosyasında tanımlanan ana pencere kapatıldığı zaman uygulama kapatılmış olur. |
OnExplicitShutdown | Tüm pencereler kapatılsa bile, Application.Shutdown() metodunu çağırmadıkça uygulama kapanmaz. |
App.xaml dosyasında aşağıdaki gibi kullanabiliriz:
<Application x:Class="TestApplication.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="Window1.xaml" ShutdownMode="OnMainWindowClose" > </Application>