Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 5. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Weitere .NET-Datentypen
7 Weitere Möglichkeiten von C#
8 Auflistungsklassen (Collections)
9 Fehlerbehandlung und Debugging
10 LINQ to Objects
11 Multithreading und die Task Parallel Library (TPL)
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 Einige wichtige .NET-Klassen
15 Projektmanagement und Visual Studio 2010
16 XML
17 WPF – Die Grundlagen
18 WPF-Containerelemente
19 WPF-Steuerelemente
20 Konzepte der WPF
21 Datenbindung
22 2D-Grafik
23 ADO.NET – verbindungsorientierte Objekte
24 ADO.NET – Das Command-Objekt
25 ADO.NET – Der SqlDataAdapter
26 ADO.NET – Daten im lokalen Speicher
27 ADO.NET – Aktualisieren der Datenbank
28 Stark typisierte DataSets
29 LINQ to SQL
30 Weitergabe von Anwendungen
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual C# 2010 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2010

Visual C# 2010
geb., mit DVD
1295 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1552-7
Pfeil 19 WPF-Steuerelemente
Pfeil 19.1 Hierarchie der WPF-Komponenten
Pfeil 19.2 Steuerelemente positionieren
Pfeil 19.2.1 Die Eigenschaften »Top«, »Bottom«, »Right« und »Left«
Pfeil 19.2.2 Außenrand mit der Eigenschaft »Margin« festlegen
Pfeil 19.2.3 Innenrand mit der Eigenschaft »Padding« festlegen
Pfeil 19.3 Allgemeine Eigenschaften der WPF-Komponenten
Pfeil 19.3.1 Die Eigenschaft »Content«
Pfeil 19.3.2 Größe einer Komponente
Pfeil 19.3.3 Ausrichtung einer Komponente
Pfeil 19.3.4 Die Eigenschaften »Padding« und »Margin«
Pfeil 19.3.5 Sichtbarkeit eines Steuerelements
Pfeil 19.3.6 Farbeinstellungen
Pfeil 19.3.7 Schriften
Pfeil 19.4 Buttons
Pfeil 19.4.1 Die Basisklasse »ButtonBase«
Pfeil 19.4.2 Das Steuerelement »Button«
Pfeil 19.4.3 Das Steuerelement »ToggleButton«
Pfeil 19.4.4 Das Steuerelement »RepeatButton«
Pfeil 19.4.5 Das Steuerelement »Checkbox«
Pfeil 19.4.6 Das Steuerelement »RadioButton«
Pfeil 19.5 Einfache Eingabesteuerelemente
Pfeil 19.5.1 Das Steuerelement »Label«
Pfeil 19.5.2 Das Steuerelement »TextBox«
Pfeil 19.5.3 Das Steuerelement »PasswordBox«
Pfeil 19.5.4 Das Steuerelement »TextBlock«
Pfeil 19.5.5 Das Steuerelement »Tooltip«
Pfeil 19.6 FlowDocuments
Pfeil 19.6.1 Allgemeine Beschreibung
Pfeil 19.6.2 Eigenschaften eines FlowDocuments
Pfeil 19.6.3 Blöcke eines FlowDocuments
Pfeil 19.6.4 Inline-Elemente
Pfeil 19.6.5 FlowDocuments mit Code erzeugen
Pfeil 19.6.6 Speichern und Laden von FlowDocuments
Pfeil 19.7 Das Element »FlowDocumentViewer«
Pfeil 19.7.1 Das Anzeigeelement »FlowDocumentScrollViewer«
Pfeil 19.7.2 Das Anzeigeelement »FlowDocumentPageViewer«
Pfeil 19.7.3 Das Anzeigeelement »FlowDocumentReader«
Pfeil 19.8 XPS-Dokumente mit »DocumentViewer«
Pfeil 19.8.1 Allgemeines zum XPS-Format
Pfeil 19.8.2 Beispielprogramm
Pfeil 19.8.3 Das Steuerelement »RichTextBox«
Pfeil 19.9 WPF-Listenelemente – ItemControls
Pfeil 19.9.1 Das Steuerelement »ListBox«
Pfeil 19.9.2 ComboBox
Pfeil 19.9.3 Das Steuerelement »ListView«
Pfeil 19.9.4 Das Steuerelement »TreeView«
Pfeil 19.9.5 Das Steuerelement »TabControl«
Pfeil 19.9.6 Menüleisten
Pfeil 19.9.7 Kontextmenüs
Pfeil 19.9.8 Symbolleisten
Pfeil 19.9.9 Die Statusleiste
Pfeil 19.10 Weitere Steuerelemente
Pfeil 19.10.1 Die »ProgressBar«
Pfeil 19.10.2 Das Steuerelement »Slider«
Pfeil 19.10.3 Das »GroupBox«-Steuerelement
Pfeil 19.10.4 Das Steuerelement »ScrollViewer«
Pfeil 19.10.5 Das Steuerelement »Expander«
Pfeil 19.10.6 Das Steuerelement »Border«
Pfeil 19.10.7 Die »Image«-Komponente
Pfeil 19.10.8 Grafik zur Laufzeit laden


Galileo Computing - Zum Seitenanfang

19.8 XPS-Dokumente mit »DocumentViewer« Zur nächsten ÜberschriftZur vorigen Überschrift


Galileo Computing - Zum Seitenanfang

19.8.1 Allgemeines zum XPS-Format Zur nächsten ÜberschriftZur vorigen Überschrift

Mit dem XPS-Format (XML Paper Specification) hat Microsoft das Pendant zu Adobes PDF-Format ins Rennen geschickt. Unter .NET werden XPS-Dokumente als FixedDocument-Objekte dargestellt. Im Gegensatz zu FlowDocument-Objekten ist deren Seitenformat unveränderlich. XPS-Dokumente besitzen auf dem Bildschirm und auf dem Drucker immer die gleiche Darstellung.

XPS-Dokumente haben unter anderem die folgenden Eigenschaften:

  • XPS-Dokumente können nicht bearbeitet werden und haben immer die gleiche Struktur.
  • Die Daten eines XPS-Dokuments befinden sich in einer XPS-Datei, die im ZIP-Format gespeichert wird.
  • Mit der Installation des .NET Frameworks (ab Version 3.0) kann auch der Internet Explorer als Viewer von XPS-Dokumenten verwendet werden.
  • Microsofts Betriebssysteme ab Vista verfügen über einen XPS-Druckertreiber.
  • Das Office-Paket bietet eine Unterstützung zum Exportieren von XPS-Dokumenten an.

Inwieweit sich das XPS-Format neben dem PDF-Format etablieren oder sich gar gegen es durchsetzen kann, bleibt abzuwarten. Der Internet Explorer als Betrachter von XPS-Dokumenten bleibt mit seinen Fähigkeiten noch immer hinter dem Adobe Reader zurück. Zudem sind XPS-Dokumente wesentlich größer als gleichwertige PDF-Dateien.


Galileo Computing - Zum Seitenanfang

19.8.2 Beispielprogramm Zur nächsten ÜberschriftZur vorigen Überschrift

Zur Darstellung von XPS-Dokumenten stellt die WPF mit DocumentViewer ein eigenes Steuerelement bereit. An der Darstellung eines XPS-Dokuments lässt sich nichts ändern, sodass dem Steuerelement einzig und allein die Aufgabe zukommt, Einfluss auf die Darstellungsform auszuüben und eine Navigation bereitzustellen.

Im XAML-Code brauchen Sie nur das Element DocumentViewer zu definieren. Da im Code später darauf zugegriffen wird, ist die Angabe der Eigenschaft Name erforderlich.


// -------------------------------------------------------
// Beispiel: ...\Kapitel 19\DocumentViewer
// -------------------------------------------------------
<Window ...>
    <Grid>
    <DocumentViewer Name="myDocViewer" />
  </Grid>
</Window>

Das Laden der XPS-Datei erfolgt im Ereignis Loaded des Window-Objekts. Diesem Beispielprogramm habe ich einen Teil von Kapitel 3 als XPS-Dokument zu Demonstrationszwecken hinzugefügt.

Um ein XPS-Dokument zu laden, benötigen Sie die Klasse XpsDocument. Diese befindet sich im Namespace System.Windows.Xps.Packaging der Bibliothek ReachFramework.dll. Letztere müssen Sie unter Verweise erst einbinden.


private void Window_Loaded(object sender, RoutedEventArgs e) {
  XpsDocument xpsDoc = new XpsDocument(@"..\..\Kapitel 3.xps", 
                                       FileAccess.Read);
  myDocViewer.Document = xpsDoc.GetFixedDocumentSequence();
  xpsDoc.Close();
}

Wie schon von den anderen Viewern her bekannt, hat auch das Element DocumentViewer eine Document-Eigenschaft, der Sie die Referenz auf das XPS-Document übergeben. Mit der Methode GetFixedDocumentSequence werden die XPS-Daten im erforderlichen Format bereitgestellt.

Das DocumentViewer-Element stellt standardmäßig Schaltflächen zur Verfügung, um die dargestellte Größe zu ändern oder im Text nach Begriffen zu suchen. Sogar das Drucken des Dokuments ist möglich. Eine individuelle Gestaltung des Viewers ist praktisch nicht möglich.

Abbildung 19.20 Das Element »DocumentViewer«


Galileo Computing - Zum Seitenanfang

19.8.3 Das Steuerelement »RichTextBox« topZur vorigen Überschrift

Alle zuvor vorgestellten Anzeigesteuerelemente wie FlowDocumentScrollViewer, FlowDocumentPageViewer und FlowDocumentReader, die über vielfältige Darstellungsmöglichkeiten verfügen, sind schreibgeschützt und erfüllen ihre Aufgabe nur als Komponenten zur Anzeige. Das RichTextBox-Steuerelement unterstützt den Anwender dabei, eigene Dokumente zu erstellen, deren Textdarstellung über die einer einfachen TextBox hinausgeht. Da eine TextBox und eine RichTextBox in der Klasse TextBoxBase eine gemeinsame Basisklasse haben, verwundert es nicht, dass beide über eine Vielzahl gemeinsamer Eigenschaften und Methoden verfügen.

Formatieren des Inhalts

Die RichTextBox gestattet viele Formatierungsmöglichkeiten des eingegeben Texts. Neben der fetten oder kursiven Darstellung einzelner Wörter oder gar Buchstaben, können Sie einzelnen Textpassagen, Wörtern und Zeichen auch eine andere Farbe oder eine andere Schriftart zuweisen. Dabei wird nur derjenige Text wunschgemäß formatiert, der aktuell ausgewählt ist.

Wir wollen uns ein Beispiel ansehen, mit dem wir den aktuell ausgewählten Text fett formatieren wollen. Die Eigenschaft Selection liefert zunächst den markierten Text. Darauf wird die Methode GetPropertyValue aufgerufen, der als Parameter die gewünschte Abhängigkeitseigenschaft übergeben wird. Damit werten wir die aktuelle Formatierung aus. In unserem Fall ist das die Eigenschaft FontWeightProperty. Der Rückgabewert ist vom Typ Object, den wir in diesem Fall in FontWeight umwandeln müssen. Damit haben wir die aktuelle Markierung erfahren. Wird der markierte Text in Normaldarstellung angezeigt, müssen wir ihn nun fett darstellen, ansonsten die fette Darstellung in Normaldarstellung. Nach einer entsprechenden Überprüfung mit entsprechender neuer Festlegung gilt es, dass neue Format dem selektierten Text zuzuweisen. Dazu rufen wir die Methode ApplyPropertyValue auf und übergeben dabei den Typ der Abhängigkeitseigenschaft und den neuen Wert.

Abbildung 19.21 Fett formatierter Text in einem RichTextBox-Control


<Window ...
    Title="RTB - Formatierung" Height="300" Width="500">
<DockPanel>   
  <StackPanel Orientation="Vertical" Width="100" DockPanel.Dock="Right">
    <Button Height="30" Name="btnFett" Click="btnFett_Click">Fett</Button>
  </StackPanel> 
  <RichTextBox Name="rtbDocument" Margin="5,5,5,5" 
               Background="LightGray" FontSize="18"></RichTextBox>
</DockPanel>
// Ereignishandler
private void btnFett_Click(object sender, RoutedEventArgs e) {
  Object fett= rtbDocument.Selection.GetPropertyValue(FontWeightProperty);
  FontWeight actFontWeight = (FontWeight)fett;
  FontWeight newFontWeight;
  if (actFontWeight == FontWeights.Bold)
    newFontWeight = FontWeights.Normal;
  else
    newFontWeight = FontWeights.Bold;               
                    rtbDocument.Selection.ApplyPropertyValue(
                            FontWeightProperty, newFontWeight);
    rtbDocument.Focus();
}

Laden und Speichern

Das einfache Ändern einer Textformatierung mit Code ist nicht in einer Zeile zu erledigen. Ähnliches gilt für das Laden und Speichern von Text. Sehen wir uns zuerst den kompletten Ereignishandler einer Schaltfläche an, die das Laden eines Dokuments bewirkt.


private void btnLaden_Click(object sender, RoutedEventArgs e) {
  OpenFileDialog dialog = new OpenFileDialog();
  dialog.Filter = "Text-Dateien|*.txt|XAML-Dateien|*.xaml|RTF-
                   Dateien|*.rtf|Alle Dateien|*.*";
  bool? result = dialog.ShowDialog();
  if (result == true) {
    string format = null; ;
    switch(dialog.FilterIndex) {
      case 1:
      case 4:
        format = DataFormats.Text;
        break;
      case 2:
        format = DataFormats.Xaml;
        break;
      case 3:
        format = DataFormats.Rtf;
        break;
    }
    FlowDocument document = rtbDocument.Document;
    TextRange range = new TextRange(document.ContentStart,
                                    document.ContentEnd);
    FileStream stream = new FileStream(dialog.FileName, FileMode.Open, 
                                       FileAccess.ReadWrite);
    range.Load(stream, format);
  }
}

Zuerst müssen wir den Inhalt des RichTextBox-Steuerelements referenzieren. Dazu wird auf Objektreferenz die Eigenschaft Document ausgewertet, die ein Objekt vom Typ FlowDocument liefert. Immerhin müssen wir nicht zwangsläufig das gesamte Dokument laden oder speichern, es kann sich auch um eine einzelne Passage handeln, die durch ein Objekt vom Typ TextRange beschrieben wird. Der Konstruktor der Klasse TextRange erwartet die Angabe des Anfangs- und Endpunkts der zu behandelnden Passage. Möchten wir das komplette Dokument laden bzw. speichern, geben wir die Eigenschaften ContentStart und ContentEnd des FlowDocument-Objekts an.

Die Methoden Load und Save des TextRange-Objekt übernehmen das Laden und Speichern. Dazu übergeben wir dem ersten Parameter ein Stream-Objekt, dem zweiten Parameter teilen wir das Datenformat mit. Letzteres wird durch eines der zahlreichen statischen Felder der Klasse DataFormats beschrieben.

Standarddialoge werden von der WPF nicht direkt unterstützt. Allerdings gibt es mit einem kleinen Trick einen Weg, auch die Windows-internen Dialoge nutzen zu können. Dazu muss man zuerst den Namespace Microsoft.Win32 mit using bekannt geben. In diesem Namespace befinden sich die Klassen OpenFileDialog und SaveFileDialog. Beide Klassen müssen vor ihrer Nutzung instanziiert werden. Mit der Methode ShowDialog werden die Dialoge zur Anzeige gebracht. Der Rückgabewert ist bool?. Ist er true, hat der Anwender eine entsprechende Auswahl mit der Öffnen-Schaltfläche des Dialogs bestätigt.

Zahlreiche Eigenschaften gestatten die individuelle Gestaltung. Im Code wurde die Eigenschaft Filter dazu verwendet, im Öffnen-Dialog die angezeigten Daten zu filtern. In unserem Beispiel werden entweder TXT-, XAML-, RTF- oder gleich alle Dateien angezeigt. Je nach Filtereinstellung des Benutzers wird diese zur Festlegung eines entsprechenden Datenformats ausgewertet. Ausgewertet wird die Dateiwahl des Anwenders durch Abrufen der Eigenschaft FileName des OpenFileDialogs.

In ähnlicher Weise wird auch der Ereignishandler zum Speichern der Daten implementiert.

Im folgenden Beispielprogramm wird das Codebeispiel zu Formatierung erweitert Der XAML-Code ist noch um zwei Buttons ergänzt worden, deren Ereignishandler das Laden und Speichern eines Dokuments ermöglichen.


// ------------------------------------------------------------------
// Beispiel: ...\Kapitel 19\RichTextBox
// -----------------------------------------------------------------
private void btnLaden_Click(object sender, RoutedEventArgs e) {
  OpenFileDialog dialog = new OpenFileDialog();
  dialog.Filter = "Text-Dateien|*.txt|XAML-Dateien|*.xaml|RTF-
                   Dateien|*.rtf|Alle Dateien|*.*";
  bool? result = dialog.ShowDialog();
  if (result == true) {
    string format = null; ;
    switch (dialog.FilterIndex) {
      case 1:
      case 4:
        format = DataFormats.Text;
        break;
      case 2:
        format = DataFormats.Xaml;
        break;
      case 3:
        format = DataFormats.Rtf;
        break;
    }
    FlowDocument document = rtbDocument.Document;
    TextRange range = new TextRange(document.ContentStart, 
                                    document.ContentEnd);
    FileStream stream = new FileStream(dialog.FileName, FileMode.Open, 
                                       FileAccess.ReadWrite);
    range.Load(stream, format);
    stream.Close();
  }
}
private void btnSpeichern_Click(object sender, RoutedEventArgs e) {
  SaveFileDialog dialog = new SaveFileDialog();
  dialog.Filter = "Text-Dateien|*.txt|XAML-Dateien|*.xaml|RTF-Dateien|*.rtf";
  bool? result = dialog.ShowDialog();
  if (result == true) {
    string format = null; ;
    switch (dialog.FilterIndex) {
      case 1:
        format = DataFormats.Text;
        break;
      case 2:
        format = DataFormats.Xaml;
        break;
      case 3:
        format = DataFormats.Rtf;
        break;
    }
    FlowDocument document = rtbDocument.Document;
    TextRange range = new TextRange(document.ContentStart, 
                                    document.ContentEnd);
    FileStream stream = new FileStream(dialog.FileName, FileMode.Create, 
                                       FileAccess.ReadWrite);
    range.Save(stream, format);
    stream.Close();
  }
}



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2010

Visual C# 2010
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2010
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern