Übersicht über die Verwendung eines automatischen Layouts
Aktualisiert: November 2007
Dieses Thema enthält Richtlinien für Entwickler zum Schreiben von Anwendungen in Windows Presentation Foundation (WPF) mit lokalisierbaren Benutzeroberflächen (user interfaces, UIs). In der Vergangenheit nahm die Lokalisierung einer Benutzeroberfläche sehr viel Zeit in Anspruch. Für jede Sprache, für die eine Benutzeroberfläche-Anpassung durchgeführt wurde, musste eine Pixelanpassung vorgenommen werden. Jetzt können die UIs mit dem geeigneten Layout und den entsprechenden Codierungsstandards so aufgebaut werden, dass die Lokalisierungsspezialisten weniger Größenänderungen und Neupositionierungen durchführen müssen. Der Ansatz, Anwendungen zu schreiben, bei denen Größenänderungen und Neupositionierungen einfacher ausgeführt werden können, wird als automatisches Layout bezeichnet und wird mithilfe des WPF-Anwendungsentwurfs erzielt.
Dieses Thema enthält folgende Abschnitte.
Vorteile der Verwendung eines automatischen Layouts
Automatisches Layout und Steuerelemente
Automatisches Layout und Codierungsstandards
Automatisches Layout und Raster
Automatisches Layout und Raster mit der IsSharedSizeScope-Eigenschaft
Verwandte Themen
Vorteile der Verwendung eines automatischen Layouts
Mit seiner Leistungsfähigkeit und Flexibilität bietet das WPF-Präsentationssystem die Möglichkeit, die Elemente in einer Anwendung so auszulegen, dass sie entsprechend den Anforderungen der unterschiedlichen Sprachen angepasst werden können. Die folgende Auflistung enthält einige der Vorteile von automatischen Layouts.
Benutzeroberfläche kann in jeder beliebigen Sprache gut angezeigt werden.
Verringert nach der Übersetzung der textlichen Inhalte die Notwendigkeit zur erneuten Anpassung der Positionen und der Größe von Steuerelementen.
Reduziert die Notwendigkeit zur erneuten Anpassung der Fenstergröße.
Benutzeroberfläche-Layout kann in jede Sprache korrekt gerendert werden.
Die Lokalisierung kann so vereinfacht werden, dass sie nur wenig komplexer als eine Zeichenfolgenübersetzung ist.
Automatisches Layout und Steuerelemente
Ein automatisches Layout ermöglicht es einer Anwendung, die Größe eines Steuerelements automatisch einzustellen. Ein Steuerelement kann sich beispielsweise so ändern, dass es die Länge einer Zeichenfolge anzeigt. Mithilfe dieser Funktion können die Lokalisierungsspezialisten die Zeichenfolge übersetzen und müssen das Steuerelement nicht mehr entsprechend der Länge der Zeichenfolge anpassen. Im folgenden Beispiel wird eine Schaltfläche mit englischem Inhalt erstellt.
<Window
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ButtonLoc.Pane1"
Name="myWindow"
SizeToContent="WidthAndHeight"
>
<DockPanel>
<Button FontSize="28" Height="50">My name is Hope.</Button>
</DockPanel>
</Window>
Wenn Sie für das Beispiel eine Schaltfläche mit spanischem Inhalt erstellen möchten, müssen Sie nur noch den Textinhalt ändern. Beispiel:
<Window
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ButtonLoc.Pane1"
Name="myWindow"
SizeToContent="WidthAndHeight"
>
<DockPanel>
<Button FontSize="28" Height="50">Me llamo Esperanza.</Button>
</DockPanel>
</Window>
Die folgende Grafik zeigt die Ausgabe der Codebeispiele.
Automatische Anpassung der Schaltflächengröße
Tipp
Das vollständige Beispiel, aus dem die vorhergehenden Beispiele stammen, finden Sie unter Beispiel zu automatischem Layout für lokalisierbare Anwendungen.
Automatisches Layout und Codierungsstandards
Für die Verwendung des automatischen Layoutansatzes sind Codierungs- und Entwurfsstandards sowie Regeln erforderlich, um eine völlig lokalisierbare Benutzeroberfläche zu erstellen. Die folgenden Richtlinien unterstützen die automatische Layoutcodierung.
Codierungsstandards |
Beschreibung |
---|---|
Verwenden Sie keine absoluten Positionen. |
|
Legen Sie keine feste Größe für ein Fenster fest. |
|
Fügen Sie eine FlowDirection hinzu. |
|
Verwenden Sie zusammengesetzte Schriftarten statt physischer Schriftarten. |
|
Fügen Sie xml:lang hinzu. |
|
Automatisches Layout und Raster
Das Grid-Element eignet sich für automatische Layouts, da es die Positionierung von Elementen ermöglicht. Ein Grid-Steuerelement kann den verfügbaren Platz auf seine untergeordneten Elemente, die in Spalten und Zeilen angeordnet sind, verteilen und platziert Benutzeroberfläche-Elemente in die jeweiligen Zellen. Die Benutzeroberfläche-Elemente können sich über mehrere Zellen erstrecken und verschachtelte Raster aufweisen. Raster sind sehr hilfreich, da Sie mit deren Hilfe eine komplexe Benutzeroberfläche erstellen und positionieren können. Im folgenden Beispiel wird veranschaulicht, wie mit einem Raster einige Schaltflächen und Text positioniert werden. Beachten Sie, dass Höhe und Breite der Zellen auf Auto festgelegt sind. Daher wird die Größe der Zelle, die die Schaltfläche mit einem Bild enthält, an das Bild angepasst.
<Grid Name="grid" ShowGridLines ="false">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="0" FontSize="24">Grid
</TextBlock>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="1" FontSize="12"
Grid.ColumnSpan="2">The following buttons and text are positioned using a Grid.
</TextBlock>
<Button Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="2" Background="Pink"
BorderBrush="Black" BorderThickness="10">Button 1
</Button>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="1" Grid.Row="2" FontSize="12"
VerticalAlignment="Center" TextWrapping="WrapWithOverflow">Sets the background
color.
</TextBlock>
<Button Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="3" Foreground="Red">
Button 2
</Button>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="1" Grid.Row="3" FontSize="12"
VerticalAlignment="Center" TextWrapping="WrapWithOverflow">Sets the foreground
color.
</TextBlock>
<Button Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="4">
<Image Source="data\flower.jpg"></Image>
</Button>
<TextBlock Margin="10, 10, 5, 5" Grid.Column="1" Grid.Row="4" FontSize="12"
VerticalAlignment="Center" TextWrapping="WrapWithOverflow">Adds an image as
the button's content.
</TextBlock>
</Grid>
Die folgende Grafik zeigt das vom vorherigen Code erzeugte Raster.
Raster
Tipp
Das vollständige Codebeispiel finden Sie unter Beispiel zu Rastern für lokalisierbare Anwendungen.
Automatisches Layout und Raster mit der IsSharedSizeScope-Eigenschaft
Raster sind in lokalisierbaren Anwendungen sehr hilfreich, um Steuerelemente zu erstellen, die sich an den entsprechenden Inhalt anpassen. Zuweilen ist es jedoch erforderlich, dass die Steuerelemente unabhängig vom Inhalt eine bestimmte Größe beibehalten. So sollen beispielsweise die Schaltflächen "OK", "Abbrechen" und "Durchsuchen" wahrscheinlich nicht an den entsprechenden Inhalt angepasst werden. In diesem Fall kann die dem Grid-Element angehängte Eigenschaft IsSharedSizeScope verwendet werden, um dieselbe Größe in mehreren Rasterelementen zu nutzen. Im folgenden Beispiel wird veranschaulicht, wie dieselbe Spalten- und Zeilengröße in mehreren Grid-Elementen gemeinsam genutzt werden kann.
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
<Button Click="setTrue" Margin="0,0,10,10">Set IsSharedSizeScope="True"</Button>
<Button Click="setFalse" Margin="0,0,10,10">Set IsSharedSizeScope="False"</Button>
</StackPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
<Grid ShowGridLines="True" Margin="0,0,10,0">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="FirstColumn"/>
<ColumnDefinition SharedSizeGroup="SecondColumn"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" SharedSizeGroup="FirstRow"/>
</Grid.RowDefinitions>
<Rectangle Fill="Silver" Grid.Column="0" Grid.Row="0" Width="200" Height="100"/>
<Rectangle Fill="Blue" Grid.Column="1" Grid.Row="0" Width="150" Height="100"/>
<TextBlock Grid.Column="0" Grid.Row="0" FontWeight="Bold">First Column</TextBlock>
<TextBlock Grid.Column="1" Grid.Row="0" FontWeight="Bold">Second Column</TextBlock>
</Grid>
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="FirstColumn"/>
<ColumnDefinition SharedSizeGroup="SecondColumn"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" SharedSizeGroup="FirstRow"/>
</Grid.RowDefinitions>
<Rectangle Fill="Silver" Grid.Column="0" Grid.Row="0"/>
<Rectangle Fill="Blue" Grid.Column="1" Grid.Row="0"/>
<TextBlock Grid.Column="0" Grid.Row="0" FontWeight="Bold">First Column</TextBlock>
<TextBlock Grid.Column="1" Grid.Row="0" FontWeight="Bold">Second Column</TextBlock>
</Grid>
</StackPanel>
<TextBlock Margin="10" DockPanel.Dock="Top" Name="txt1"/>
Hinweis: Das vollständige Codebeispiel finden Sie unter Gewusst wie: Freigeben von Größeneigenschaften zwischen Grids.
Siehe auch
Aufgaben
Gewusst wie: Verwenden des automatischen Layouts zum Erstellen einer Schaltfläche
Gewusst wie: Verwenden eines Rasters für automatisches Layout