TOC

This article has been localized into German by the community.

Eine WPF-Applikation:

Kommandozeilenparameter in WPF

Kommandozeilenparameter können der Anwendung beim Start angehängt werden, umso das Verhalten zu beeinflussen. Häufig wird dies dafür genutzt, damit eine Anwendung eine Datei beim Start öffnet. So zum Beispiel in einem Editor. Du kannst es selbst mit dem mitgelieferten Editor von Windows ausprobieren, indem du folgenden Befehl unter „Ausführen“ (Windows Taste und R drücken) eingibst:

notepad.exe c:\Windows\win.ini

Damit wird Notepad zusammen mit der win.ini Datei geöffnet (Möglicherweise musst du den Pfad noch anpassen oder wählst eine eigene Textdatei aus). Notepad wertet die Parameter aus und sucht anschließend nach der Datei. Dies kannst du auch in deiner Anwendung implementieren!

Kommandozeilenparameter werden beim Start deiner WPF Anwendung durch die Startup Methode, welche wir in dem Artikel „Verwendung der App.xaml“ erklärt haben, an die Anwendung weitergegeben. Wir werden das gleich in diesem Beispiel machen und dabei die Parameter, bzw. Argumente der Methode nutzen. Zunächst nochmal die App.xaml:

<Application x:Class="WpfTutorialSamples.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
			 Startup="Application_Startup">
    <Application.Resources></Application.Resources>
</Application>

Alles was wir dafür tun müssen, ist die Eigenschaft StartupUri durch das Ereignis Startup zu ersetzen. Dadurch wird automatisch die Methode „Application_Startup“ in der App.xaml.cs Datei eingefügt:

using System;
using System.Collections.Generic;
using System.Windows;

namespace WpfTutorialSamples
{
	public partial class App : Application
	{

		private void Application_Startup(object sender, StartupEventArgs e)
		{
			MainWindow wnd = new MainWindow();
			if(e.Args.Length == 1)
				MessageBox.Show("Now opening file: \n\n" + e.Args[0]);
			wnd.Show();
		}
	}
}

Wir nutzen die Variable e vom Typ StartupEventArgs. Die Variable e hat eine Eigenschaft namens Args, welche ein Array vom Typ String ist. Die Kommandozeilenparameter werden durch Leerzeichen getrennt, es sei denn, die Leerzeichen sind innerhalb eines Ausdrucks, welcher in Anführungsstrichen ist.

Einfügen der Kommandozeilenparameter

Wenn du die obere Anwendung ausführen lässt, wird nichts passieren, da noch keine Kommandozeilenparameter angegeben wurden. Glücklicherweise macht es Visual Studio da einem einfach diese zu testen. Gehe dazu auf den Menüpunkt Projekt, wähle dann "[Projektname] Eigenschaften" und dann den Reiter Debuggen. Hier kannst du unter Startoptionen -> Befehlszeilenargumente Parameter einfügen. Es sieht in etwa so aus:

Starte nun die Anwendung und du wirst die Parameter sehen, bzw. die Anwendung reagiert auf diese.

Natürlich ist diese Meldung nicht sonderlich hilfreich. Stattdessen wäre es sinnvoller die Parameter an den Konstruktor des Hauptfensters zu leiten oder an eine öffentliche Methode, die die Datei öffnet. Dies könnte so geschehen:

using System;
using System.Collections.Generic;
using System.Windows;

namespace WpfTutorialSamples
{
	public partial class App : Application
	{

		private void Application_Startup(object sender, StartupEventArgs e)
		{
			MainWindow wnd = new MainWindow();
			// The OpenFile() method is just an example of what you could do with the
			// parameter. The method should be declared on your MainWindow class, where
			// you could use a range of methods to process the passed file path
			if(e.Args.Length == 1)
				wnd.OpenFile(e.Args[0]);
			wnd.Show();
		}
	}
}

Weitere Möglichkeiten der Kommandozeilenparameter

In unserem Beispiel testen wir die Argumente exakt auf einen Parameter (hier der Dateiname). Doch in größeren Anwendungen können oft mehrere Argumente angegeben werden, die z. B. gewisse Einstellungen ein-, bzw. ausschalten können. Dafür lässt man die einzelnen Argumente durchlaufen, wertet sie aus und reagiert dementsprechend. Dieses würde allerdings diesen Artikel sprengen.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!