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

Inhaltsverzeichnis
1 Einführung
2 Grundlagen der Sprachsyntax
3 Klassendesign
4 Weitere Datentypen
5 Multithreading
6 Collections und LINQ
7 Eingabe und Ausgabe
8 Anwendungen: Struktur und Installation
9 Code erstellen und debuggen
10 Einige Basisklassen
11 Windows-Anwendungen erstellen
12 Die wichtigsten Steuerelemente
13 Tastatur- und Mausereignisse
14 MDI-Anwendungen
15 Grafiken mit GDI+
16 Drucken
17 Entwickeln von Steuerelementen
18 Programmiertechniken
19 WPF – Grundlagen
20 Layoutcontainer
21 WPF-Steuerelemente
22 Konzepte von WPF
23 Datenbankverbindung mit ADO.NET
24 Datenbankabfragen mit ADO.NET
25 DataAdapter
26 Offline mit DataSet
27 Datenbanken aktualisieren
28 Stark typisierte DataSets
A Anhang: Einige Übersichten
Stichwort

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual Basic 2008 von Andreas Kuehnel, Stephan Leibbrandt
Das umfassende Handbuch
Buch: Visual Basic 2008

Visual Basic 2008
3., aktualisierte und erweiterte Auflage, geb., mit DVD
1.323 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1171-0
Pfeil 22 Konzepte von WPF
Pfeil 22.1 Abhängige und angehängte Eigenschaften
Pfeil 22.1.1 Abhängige Eigenschaften
Pfeil 22.1.2 Angehängte Eigenschaften
Pfeil 22.2 Ressourcen
Pfeil 22.2.1 Definition
Pfeil 22.2.2 Zeitpunkt der Wertbestimmung
Pfeil 22.2.3 Abrufen von Systemressourcen
Pfeil 22.3 Stile
Pfeil 22.3.1 Einfache Stile
Pfeil 22.3.2 Typisierte Stile
Pfeil 22.4 Trigger
Pfeil 22.4.1 Eigenschaftstrigger
Pfeil 22.4.2 Ereignistrigger
Pfeil 22.4.3 Datentrigger
Pfeil 22.5 Kommandos
Pfeil 22.5.1 Vordefiniert
Pfeil 22.5.2 Beispielanwendung
Pfeil 22.5.3 Kommando-Ziel
Pfeil 22.5.4 Kommandos an Ereignisse binden
Pfeil 22.5.5 Kommandos programmieren
Pfeil 22.6 Datenbindung
Pfeil 22.6.1 Einfache Datenbindung
Pfeil 22.7 Bindungsarten
Pfeil 22.7.1 Aktualisierung der Quelle
Pfeil 22.7.2 Datenbindungsquellen
Pfeil 22.7.3 Auflistungen anbinden


Rheinwerk Computing - Zum Seitenanfang

22.4 Trigger Zur nächsten ÜberschriftZur vorigen Überschrift

Die bisher verwendeten Ressourcen (inklusive Stile) ändern sich nicht durch den Zustand der Anwendung. Mit Zustand ist hier nicht der Satz an Stilen gemeint, die sich bei einer dynamischen Bindung automatisch ändern, sondern stilunabhängige Zustände. Zum Beispiel können häufiger genutzte Buttons etwas größer dargestellt werden, oder eine Textverarbeitung kann die Textdarstellung ändern, wenn ein Text sehr lange nicht mehr gesichert wurde.

Die Lösung sind Trigger, die für die Reaktion auf Ereignisse, Eigenschaftsänderungen usw. verwendet werden. Trigger werden oft zusammen mit Stilen verwendet, können aber auch der Eigenschaft Triggers einer Komponente direkt zugewiesen werden. Eine Komponente darf auch mehrere Trigger haben, um auf verschiedene Zustandsänderungen unterschiedlich zu reagieren.


Rheinwerk Computing - Zum Seitenanfang

22.4.1 Eigenschaftstrigger Zur nächsten ÜberschriftZur vorigen Überschrift

Bewegen Sie beispielsweise die Maus über eine Schaltfläche, ändert sich der Hintergrund und der Rahmen des Steuerelements in einer vordefinierten Art. Wollen Sie die Art der Änderung selbst definieren, können Sie einen passenden Ereignishandler implementieren. Alternativ können Sie in XAML die Zustandsänderung erfassen und darauf reagieren.

WPF-Komponenten haben Eigenschaften, die einen bestimmten Zustand beschreiben. Mit IsMoueOver lässt sich beispielsweise feststellen, ob sich der Mauszeiger aktuell über der Komponente befindet, und mit IsPressed prüfen Sie, ob auf die Komponente geklickt wird. Die Prüfung beschränkt sich aber nicht nur auf IsXXX-Eigenschaften. So lässt sich zum Beispiel auch die Eigenschaft Text einer TextBox auf einen bestimmten Inhalt hin untersuchen.

Eigenschaftstrigger werden in einem Style-Element definiert. Jeder Trigger steht in einem eigenen Trigger-Element innerhalb eines Style.Triggers-Abschnitts. Dessen Eigenschaften Property und Value nennen die Eigenschaft und deren Wert, die überwacht werden sollen. Hat die Eigenschaft zur Laufzeit den Wert der Value-Einstellung, wird der Trigger aktiviert, und die darin enthaltenen Setter-Elemente werden ausgewertet.


<Style>
  <Style.Triggers>
    <Trigger Property="..." Value="...">
      <Setter .../>
      <Setter .../>
    </Trigger>
  </Style.Trigger>
</Style>

Das Beispiel aus Abschnitt 22.3.1, »Einfache Stile«, wird im Folgenden durch einen Trigger ergänzt, der die Darstellung der Schaltfläche unter der Maus ändert:


'...\WPFKonzepte\Trigger\Einfach.xaml

<Window ...>
  <Window.Resources>
    <Style x:Key="MyStyle">
      <Setter Property="Control.Height" Value="35" />
      <Setter Property="Control.FontSize" Value="18" />
      <Setter Property="Control.Background">
        <Setter.Value>
          <LinearGradientBrush StartPoint="0,0"  EndPoint="0,1">
            <GradientStop Offset="0.0" Color="Red" />
            <GradientStop Offset="1.0" Color="LightCyan" />
          </LinearGradientBrush>
        </Setter.Value>
      </Setter>
      <Style.Triggers>
        <Trigger Property="Button.IsMouseOver" Value="True">
          <Setter Property="Control.FontStyle" Value="Italic" />
          <Setter Property="Control.Background">
            <Setter.Value>
              <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Offset="0.0" Color="Yellow" />
                <GradientStop Offset="1.0" Color="Blue" />
              </LinearGradientBrush>
            </Setter.Value>
          </Setter>
        </Trigger>
      </Style.Triggers>
    </Style>
  </Window.Resources>
  <StackPanel>
    <Button Style="{StaticResource MyStyle}">Button1</Button>
    <Button Style="{StaticResource MyStyle}">Button2</Button>
    <Button Style="{StaticResource MyStyle}">Button3</Button>
  </StackPanel>
</Window>

Ein Trigger nimmt Änderungen an einer oder mehreren Komponenten vor. Diese werden rückgängig gemacht, wenn die im Trigger angegebene Bedingung nicht mehr erfüllt ist. Verlässt in unserem Beispiel der Mauszeiger den Bereich eines Buttons, kehrt dieser wieder in seinen Ausgangszustand zurück.

MultiTrigger

Einen von mehreren Bedingungen abhängigen Trigger definieren Sie in einem MultiTrigger-Element. Jede Bedingung wird in einem eigenen Condition-Element angegeben, das sich im Conditions-Abschnitt des MultiTrigger-Elements befindet. Nur wenn alle Bedingungen erfüllt sind, löst der Trigger aus.

Im folgenden Beispiel enthält Window eine TextBox-Komponente mit einem Textinhalt. Wenn die Textbox leer ist und sich gleichzeitig der Mauszeiger über der Textbox befindet, wird deren Hintergrund in Rot dargestellt.


'...\WPFKonzepte\Trigger\Multi.xaml

<Window ...>
  <Window.Resources>
    <Style TargetType="{x:Type TextBox}">
      <Style.Triggers>
        <MultiTrigger>
          <MultiTrigger.Conditions>
            <Condition Property="TextBox.IsMouseOver" Value="true" />
            <Condition Property="TextBox.Text" Value="" />
          </MultiTrigger.Conditions>
          <Setter Property="TextBox.Background" Value="Red" />
        </MultiTrigger>
      </Style.Triggers>
    </Style>
  </Window.Resources>
  <StackPanel>
    <TextBox Margin="20" Width="200">
      Windows Presentation Foundation WPF
    </TextBox>
  </StackPanel>
</Window>

Rheinwerk Computing - Zum Seitenanfang

22.4.2 Ereignistrigger Zur nächsten ÜberschriftZur vorigen Überschrift

Ereignistrigger werden durch Ereignisse vom Typ RoutedEvent ausgelöst. Darüber können Sie »Animationen« starten. Neben grafischen Spielereien können zum Beispiel Tabellen mit Börsendaten permanent auf dem aktuellen Stand gehalten werden.


Hinweis
Eigenschaften in einem Ereignistrigger permanent zu ändern ist nicht möglich.


Sehen wir uns zuerst die Struktur eines solchen Triggers in XAML an:


<Style ...>
  <Style.Triggers>
    <EventTrigger RoutedEvent="...">
      <EventTrigger.Actions>
        ...
      </EventTrigger.Actions>
    </EventTrigger>
  </Style.Triggers>
</Style>

Ereignistrigger werden in einem Style-Element oder direkt in einer Komponente definiert. Jeder Ereignistrigger steht in einem eigenen EventTrigger-Element mit einem zwingend vorgeschriebenen RoutedEvent-Attribut. Hier wird das auslösende Ereignis angegeben. In einem EventTrigger.Actions-Element werden die Aktionen festgelegt, die beim Auslösen des Triggers ausgeführt werden sollen.

Der Start und das Ende der Aktionen werden in den Elementen BeginStoryBoard und StopStoryBoard spezifiziert. Eine StoryBoard-Komponente ist eine Art Container, in dem die Animation über eine Zeitlinie hinweg abläuft.

Das folgende Beispiel zeigt einen simplen Einsatz anhand des Ereignisses MouseEnter. Wird zur Laufzeit die Maus über die Schaltfläche gezogen, »verschwindet« diese zunächst, weil die Eigenschaft Opacity auf 0 gesetzt wird. Im Laufe der folgenden 10 Sekunden wird die Sichtbarkeit des Buttons kontinuierlich wiederhergestellt.


'...\WPFKonzepte\Trigger\Ereignis.xaml

<Window ...>
  <Window.Resources>
    <Style TargetType="{x:Type Button}"><Style.Triggers>
      <EventTrigger RoutedEvent="MouseEnter">
        <EventTrigger.Actions>
          <BeginStoryboard>
            <Storyboard>
              <DoubleAnimation From="0" To="1" Duration="0:0:10"
                   Storyboard.TargetProperty="(Opacity)" />
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger.Actions>
      </EventTrigger>
    </Style.Triggers></Style>
  </Window.Resources>
  <StackPanel>
    <Button Height="50">Button1</Button>
  </StackPanel>
</Window>

Rheinwerk Computing - Zum Seitenanfang

22.4.3 Datentrigger topZur vorigen Überschrift

Im Gegensatz zu Eigenschaftstriggern reagieren Datentrigger auf die Änderung einer beliebigen Eigenschaft. Ereignistrigger berücksichtigen hingegen nur abhängige Eigenschaften.

Jeder Datentrigger wird in einem eigenen DataTrigger-Element spezifiziert, das in einer Triggers-Liste steht. Da Datentrigger auch mit nicht-abhängigen Eigenschaften umgehen können, wird anstelle des Attributs Property das Attribut Binding angegeben.

Den Einsatz eines Datentriggers zeigt das folgende Beispiel. Das Fenster enthält eine TextBox. Wird zur Laufzeit die Zeichenfolge »Weg damit« eingetragen, wird sie deaktiviert.


'...\WPFKonzepte\Trigger\Daten.xaml

<Window ...>
  <Window.Resources>
    <Style TargetType="{x:Type TextBox}">
      <Style.Triggers>
        <DataTrigger
          Binding=
            "{Binding RelativeSource={RelativeSource Self}, Path=Text}"
          Value="Weg damit">
          <Setter Property="IsEnabled" Value="False" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Window.Resources>
  <StackPanel>
    <TextBox Height="23" VerticalAlignment="Center" />
  </StackPanel>
</Window>


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Visual Basic 2008
Visual Basic 2008
Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Visual Basic 2012






 Visual Basic 2012


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Rheinwerk-Shop: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Rheinwerk-Shop: Windows Presentation Foundation






 Windows Presentation
 Foundation


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
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