Symbolleisten mit dem ToolBar-Steuerelement

Bei Anwendungen, die eine Menüleiste statt des Ribbons verwenden, finden Sie meist auch noch Symbolleisten vor. Davon gibt es im Gegensatz zur Menüleiste manchmal nicht nur eine, sondern mehrere. Symbolleisten zeichnen sich außerdem dadurch aus, dass Sie diese verschieben können und dass sie keine Untermenüs enthalten. Außerdem finden Sie die Befehle meist in Form einfacher Schaltflächen mit entsprechenden Symbolen vor, damit diese wenig Platz wegnehmen. Auch für eine WPF-Anwendung können Sie Symbolleisten hinzufügen. Wie das geht, zeigt der vorliegende Artikel.

Im Artikel Das Menu-Steuerelement (www.datenbankentwickler.net/244) haben wir bereits gezeigt, wie Sie eine Menüleiste zum Fenster einer Anwendung hinzufügen. Es gibt immer nur eine Menüleiste je Fenster, dem Sie ein oder mehrere Elemente in der obersten Ebene hinzufügen können. Diese stellen normalerweise per Mausklick eine aufklappbare Liste von Befehlen oder weiteren Untermenüs zur Verfügung. Bei den Symbolleisten ist es etwas anders: Sie können auch mehr als eine Symbolleiste hinzufügen, die nach dem Wunsch des Benutzers angeordnet werden kann. In den Beispielen zu diesem Artikel verwenden wir wieder ein übergeordnetes DockPanel-Element, dem wir eine Menüleiste und eine Symbolleiste hinzufügen.

Aufbau einer Symbolleiste

Bei der Menüleiste ist der Aufbau eindeutig: Es gibt ein Menu-Element, das im DockPanel-Element oben angedockt wird und das die benötigten Menüelemente enthält. Bei der Symbolleiste verwenden wir noch ein zusätzliches Element, nämlich das ToolBarTray in der obersten Ebene. Dieses ordnen Sie wie das Menu-Element dem DockPanel-Element unter (siehe Beispielprojekt, MainWindow.xaml, Beispiel 1):

<Window x:Class="MainWindow" ... Title="MainWindow" Height="350" Width="600">
     <DockPanel>
         <Menu DockPanel.Dock="Top">...</Menu>
         <ToolBarTray DockPanel.Dock="Top">

Das ToolBarTray-Element kann dann ein oder mehrerere ToolBar-Elemente enthalten, die wiederum Button-Elemente mit dem Befehlen bereithalten:

             <ToolBar>
                 <Button Command="Cut" Content="Ausschneiden"></Button>
                 <Button Command="Copy" Content="Kopieren"></Button>
                 <Button Command="Paste" Content="Einfügen"></Button>

Zum Abschluss werden die geöffneten Elemente ToolBar und ToolBarTray wieder geschlossen und es folgt beispielsweise ein Grid-Element, das die übrigen Steuerelemente des Fensters enthält:

             </ToolBar>
         </ToolBarTray>
         <Grid>...</Grid>
     </DockPanel>
</Window>

In Bild 1 sehen Sie die resultierende Symbolleiste. In diesem Fall haben wir einige eingebaute Befehle über das Command-Attribut verfügbar gemacht – Cut, Copy und Paste. Leider erkennt die Anwendung nicht, dass diese hier in einer Symbolleiste abgebildet werden sollen und zeigt keine Icons, sondern nur den Text an. Das können wir ändern!

Fenster mit Symbolleiste

Bild 1: Fenster mit Symbolleiste

Symbolleiste mit Icons

Wenn wir statt der Beschriftungen für die eingebauten Befehle Cut, Copy und Paste nur Icons anzeigen wollen, müssen wir diese zunächst zum Projekt hinzufügen. Dazu legen wir im Projektmappen-Explorer ein neues Verzeichnis namens Icons an und fügen diesem die benötigten Icons hinzu (siehe Bild 2).

Hinzufügen von Icons zum Projekt

Bild 2: Hinzufügen von Icons zum Projekt

Danach bearbeiten wir die Steuerelemente der Symbolleiste in der XAML-Definition so, dass sie statt Text die Icons anzeigen. Dazu entfernen wir die Content-Attribute und fügen jeweils ein Image-Element hinzu. Dieses erhält für das Attribut Source den Pfad zu der Bilddatei im Projektverzeichnis (siehe Beispielprojekt, MainWindow.xaml, Beispiel 2):

<ToolBarTray DockPanel.Dock="Top">
     <ToolBar>
         <Button Command="Cut">
             <Image Source="Icons/cut.png"></Image>
         </Button>
         <Button Command="Copy">
             <Image Source="Icons/copy.png"></Image>
         </Button>
         <Button Command="Paste">
             <Image Source="Icons/clipboard_paste.png"></Image>
         </Button>
     </ToolBar>
</ToolBarTray>

Das Ergebnis sehen Sie in Bild 3. Interessanterweise werden die Schaltflächen mit den Icons im Gegensatz zu den reinen Text-Schaltflächen nicht in Abhängigkeit vom Kontext als aktiviert oder deaktiviert gekennzeichnet. So sollte zum Beispiel die Ausschneiden-Schaltfläche nur als aktiv dargestellt werden, wenn im Textfeld darunter ein Text markiert ist. Das wollen wir später nachholen – erst einmal schauen wir uns an, wie wir eine weitere Symbolleiste hinzufügen und wie wir Icons und Texte auf einer Schaltfläche kombinieren können.

Symbolleiste mit Icons

Bild 3: Symbolleiste mit Icons

Eine zweite Symbolleiste hinzufügen

Zum Hinzufügen einer zweiten Symbolleiste legen Sie einfach ein weiteres ToolBar-Element im ToolBarTray-Element an. Je nachdem, ob die zweite Symbolleiste vor oder hinter der ersten erscheinen soll, fügen Sie das neue ToolBar-Element vor oder hinter einem bereits bestehenden ToolBar-Element ein (siehe Beispielprojekt, MainWindow.xaml, Beispiel 3):

<ToolBarTray DockPanel.Dock="Top">
     <ToolBar>
         ... Steuerelemente
     </ToolBar>
     <ToolBar>
         ... Steuerelemente
     </ToolBar>
</ToolBarTray>

In diesem Fall werden die beiden Symbolleisten direkt nebeneinander angezeigt (siehe Bild 4). Es gibt jedoch die Möglichkeit, diese auch untereinander auszugeben.

Zwei Symbolleisten nebeneinander

Bild 4: Zwei Symbolleisten nebeneinander

Der einfachste Weg ist, dass der Benutzer die Symbolleisten einfach per Drag and Drop so positioniert, wie er sich diese wünscht (siehe Bild 5). Beim nächsten Start der Anwendung werden die Symbolleisten allerdings wieder so wie im XAML-Code definiert ausgegeben. Wie also können wir die Symbolleisten direkt beim Starten untereinander anzeigen

Zwei Symbolleisten untereinander

Bild 5: Zwei Symbolleisten untereinander

Symbolleistenposition relativ zu anderen Symbolleisten

Wenn Sie mehr als eine Symbolleiste verwenden, also mehr als ein ToolBar-Element innerhalb des ToolBarTray-Elements einfügen, werden diese wie oben beschrieben einfach in der gleichen Reihenfolge nebeneinander angeordnet. Wenn Sie die Reihenfolge ändern möchten, ohne die Reihenfolge im Code zu ändern, können Sie das mit der Eigenschaft BandIndex erledigen. BandIndex ist ein 0-basierter Index (siehe Beispielprojekt, MainWindow.xaml, Beispiel 4). Wenn Sie also für das erste ToolBar-Element innerhalb des ToolBarTray-Elements den Wert 0 angeben, dann verbleibt es an der Position, die es vorher innehatte. Im folgenden Beispiel erhalten wir die Anordnung aus Bild 6:

Standardreihenfolge

Bild 6: Standardreihenfolge

<ToolBarTray DockPanel.Dock="Top">
     <ToolBar>
         <Button>Button in Toolbar 1</Button>
     </ToolBar>
     <ToolBar>
         <Button>Button in Toolbar 2</Button>
     </ToolBar>
     <ToolBar>
         <Button>Button in Toolbar 3</Button>
     </ToolBar>
</ToolBarTray>

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins DATENBANKENTWICKLER:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar