csc /r:c:\windows\Microsoft.net\Windows\v6.0.4030\PresentationCore.dll /r:c:\windows\Microsoft.net\Windows\v6.0.4030\PresentationFramework.dll /r:c:\windows\Microsoft.net\Windows\v6.0.4030\WindowsBase.dll MainApp.cs
System.Windows.Controls | UI-Kontrollelemente | System.Windows.Documents | Avalon Document-Service-Klassen | System.Windows.Shapes | Grafik-primitive | System.Windows.Media | 2D- und 3D-Grafik | System.Windows.Navigation | Navigationsklassen | System.Windows.Data | Datenanbindung an Eigenschaften | System.Windows | Fensterbasisklassen, Application, XAML-Unterstützung, Ereignisunterst. | System.Windows.Controls.Primitives | Klassen die als Basiselemente in komplexen Kontrollelementen verwendet werden. | System.Windows.Media.Animation | Animationsklassen | System.Windows.Media.Media3D | 3D-Grafik | System.Windows.Annotations | Anmerkungsklassen für Dokumente |
Current | Diese statische Eigenschaft fiefert das aktuelle (Navigation)Application-Object. |
MainWindow | Setzt oder liest das Hauptfenster der Anwendung (als Window-Objekt). |
ShutdownMode | Legt fest, wann eine Anwendung beendet wird OnLastWindowClose - 0 - wenn letztes Fenster geschlossen wird oder die Anwendung explizit beendet wird - default OnMainWindowClose - 1 - Beenden, wenn das Hauptfenster geschlossen wird oder Application.Shutdown aufgerufen wird OnExplicitShutdown - 2 - Beenden, wenn explizit Application.Shutdown aufgerufen wird). |
Windows | Aufzählung aller Anwendungsfenster |
OnStartingUp OnShuttingDown |
Starten und Beenden der Anwendung |
using System; using System.Windows; using System.Windows.Controls; namespace Beispiel3 { public class MainApp: Application { [System.STAThread] public static void Main() { MainApp ma = new MainApp(); ma.Run(); } protected override void OnStartingUp(StartingUpCancelEventArgs e) { base.OnStartingUp(e); Console.WriteLine("Starte"); ShowMainWindow(); } private void ShowMainWindow() { Window win = new Window(); DockPanel dp = new DockPanel(); TextBox tb = new TextBox(); tb.Text = "Hallo"; win.Content = dp; DockPanel.SetDock(tb, System.Windows.Controls.Dock.Top); dp.Children.Add(tb); win.Show(); } } }
using System; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Shapes; using System.Windows.Media; using System.Windows.Navigation; using System.Windows.Data; using System.Windows; using System.Windows.Controls.Primitives; using System.Windows.Media.Animation; using System.Windows.Media.Media3D; using System.Windows.Annotations; using System.Windows.Annotations.Anchoring; using System.Windows.Annotations.Storage;Desweiteren wird ein Namespace x definiert, der zur Kennzeichnung von Definitionen genutzt wird. Durch die weitere Verschachtelung von Elementen wird eine Oberlächenstruktur geschaffen. So kann in ein Fenster ein Panel und darauf eine Schaltfläche eingefügt werden.
<Wurzelelement xmlns="http://schemas.microsoft.com/2003/xaml" xmlns:x="Definition"> <Unterelement> </Unterelement> </Wurzelelement>Um weitere .NET-Typen aus anderen, z.B. selbstdefinierten, Namespaces zuzulassen, müssen Sie diese über ein Mapping einbinden. Dazu dient die PI (Processing Instruction) ?Mapping. Im Beispiel wird dazu der Präfix meinName definiert, der sich im .NET-Namespace Mein.NameSpace befindet. Die Assembly wird über das gleichnamige Attribut angegeben. Um dann später die Klasse Element zu verwenden, wird der Präfix des Namespaces davor gesetzt, also meinName:Element.
<?Mapping XmlNamespace="meinName" ClrNamespace="Mein.NameSpace" Assembly="MeineAssembly.dll" ?> <Wurzelelement xmlns="http://schemas.microsoft.com/2003/xaml" xmlns:x="Definition"> <Unterelement> <meinName:Element /> </Unterelement> </Wurzelelement>Beispiel Es wird zuerst ein einfaches Fenster mit einer Schaltfläche erzeugt. Die Schaltflächen werden anhand des Textes automatisch in der Größe angepaßt. Auch die Position wird automatisch festgelegt. Dies ist in diesem Fall übereinander. Für die Festlegung der Beschriftung werden vier Varianten verwendet.
<Window xmlns="http://schemas.microsoft.com/2003/xaml"> <Button> <Text>Klick mich...1</Text> </Button> <Button> Klick mich...1 </Button> <Button Content="Klick mich...1" /> <Button> <Button.Content>Klick mich...3</Button.Content> </Button> </Window>Damit die Buttons einigermaßen ordentlich angeordnet werden, muss ein Layout verwendet werden (ja, wie in Java). Das FlowPanel ordnet z.B. die Elemente einfach hintereinander an. Reicht der Platz nicht, geht es darunter weiter.
<Window x:Class="Beispiel2.Window1" xmlns="http://schemas.microsoft.com/2003/xaml" xmlns:x="Definition" Text="Beispiel2" Width="300" Height="200"> <FlowPanel> <Button> <Text>Klick mich...1</Text> </Button> <Button> Klick mich...1 </Button> <Button Content="Klick mich...1" /> <Button> <Button.Content>Klick mich...3</Button.Content> </Button> </FlowPanel> </Window>TIPP: Entfernen Sie im Element <Window> die Attribute x:Class und xmlns:Definition können Sie die *.xaml-Datei sogar direkt im Internet Explorer öffnen.
Button btn = new Button(); btn.Content = "Klick mich...1";Typumwandlungen
<Button Content="Klick mich...1" FontSize="18px" Background="LightBlue" FontFamily="Verdana" FontStyle="Italic" Opacity=".5" /> <Button FontSize="18px" Background="LightBlue" FontFamily="Verdana" FontStyle="Italic" Opacity=".5"> <Image Source="Bild.jpg" Width="100" Height="300" /> </Button>Auch Bilder mit Text erlaubt XAML. Allerdings müssen Sie nun beide wieder in ein neues Element einschließen.
<Button FontSize="18px" Background="LightBlue" FontFamily="Verdana" FontStyle="Italic" Opacity=".5"> <Text> <Image Source="Delphi1KK.jpg" Width="100" Height="300" /> Bla Bla </Text> </Button>