TOC

This article has been localized into Czech by the community.

WPF aplikace:

Parametry příkazového řádku ve WPF

Parametry příkazového řádku jsou technika, díky které můžete předat aplikaci, kterou chcete spustit, několik parametrů, takže je možné nějak ovlivnit běh aplikace. Nejčastěji se toho využívá, když má aplikace použít nějaký soubor, takovou typickou aplikací je libovolný editor. To si jednoduše vyzkoušíte sami na aplikaci Poznámkový blok (vestavěná součást Windows), když spustíte (vyberte možnost Spustit v nabídce Start nebo stiskněte [WindowsKey-R]) a následující příkaz:

notepad.exe c:\Windows\win.ini

Tím se otevře Poznámkový blok, s tím, že rovnou otevře soubor win.ini (možná ale budete muset cestu v příkazu upravit, protože ve vašem systému může být jiná). Poznámkový blok jednoduše zpracuje parametry a použije je jako cesty k souborům, které načte. A vaše aplikace může dělat totéž!

Parametry příkazového řádku jsou do vaší WPF aplikace předány v rámci události Startup, kterou jsme popsali v článku Práce s App.xaml. Nyní to uděláme úplně stejně, a použijeme hodnotu předanou do obslužné metody k získání parametrů. Nejprve upravme soubor 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>

Jediné, co je zde třeba udělat, je napojit se na událost Startup, a zároveň smazat vlastnost StartupUri. Samotnou obsluhu události pak naimplementujeme v souboru App.xaml.cs:

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();
		}
	}
}

Pro naše účely využijeme objektu StartupEventArgs, který je předán (ve výchozí podobě pod názvem e) v události Application Startup. Tento objekt má vlastnost Args, což je pole stringů (textových řetězců). Jednotlivé parametry se oddělují mezerami, pokud nebyl parametr uzavřen do uvozovek, takový je pak celý i s mezerami v jednom stringu z pole Args.

Testování parametru příkazového řádku

Spustíte-li příklad výše, nic se nestane - to je proto, že při spustění nebyly žádné parametry předány. Visual Studio naštěstí umožňuje velmi jednodušše otestovat předání parametrů. V menu Project zvolte "[Název projektu] properties" (v české verzi Visual Studia Projekt ->"Vlastnosti [Název projektu]") a dále přejděte na kartu Debug (Ladění), a tam je možné zadat parametry, které budou při spuštění předány aplikaci. Mělo by to vypadat nějak takto:

Zkuste aplikaci spustit a uvidíte, jak na váš parametr zareaguje.

Pouhá zpráva není samozřejmě sama o sobě příliš užitečná. Na místo toho se typicky parametr buďto předá konstruktoru hlavního okna, nebo se s ním zavolá nějaká veřejná metoda, například takto:

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();
		}
	}
}

Možnosti příkazového řádku

V příkladu výše testujeme, zdali byl předán jediný parametr, a pokud ano, použijeme jej jako jméno souboru. V reálné aplikaci je ale typicky žádoucí sebrat vícero parametrů, a použít je třeba i pro nastavení, například vypnutí či zapnutí některých funkcí. To se dá udělat pomocí smyčky, která projde celé pole s parametry a přitom sesbírá z něj veškeré informace, které jsou potřeba. Takový příklad je však mimo rámec tohoto článku.


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!