|
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
|
Übersetzung
Original
|
Übersicht über XAML (WPF)
Dieses Thema enthält folgende Abschnitte.
- Was ist XAML?
- Zusammenfassung der XAML-Syntax
- Groß-/Kleinschreibung und Leerzeichen in XAML
- Markuperweiterungen
- Typkonverter
- XAML-Stammelemente und XAML-Namespaces
- Benutzerdefinierte Präfixe und benutzerdefinierte Typen in XAML
- Ereignisse und XAML-Code-Behind
- Benannte XAML-Elemente
- Angefügte Eigenschaften und angefügte Ereignisse
- Basistypen und XAML
- XAML-Sicherheit
- Laden von XAML aus Code
- Weitere Informationen
- Verwandte Themen
<StackPanel> <Button Content="Click Me"/> </StackPanel>
XAML-Objektelemente
<StackPanel> <Button Content="Click Me"/> </StackPanel>
Attributsyntax (Eigenschaften)
<Button Background="Blue" Foreground="Red" Content="This is a button"/>
Eigenschaftenelementsyntax
<Button> <Button.Background> <SolidColorBrush Color="Blue"/> </Button.Background> <Button.Foreground> <SolidColorBrush Color="Red"/> </Button.Foreground> <Button.Content> This is a button </Button.Content> </Button>
Auflistungssyntax
<LinearGradientBrush> <LinearGradientBrush.GradientStops> <!-- no explicit new GradientStopCollection, parser knows how to find or create --> <GradientStop Offset="0.0" Color="Red" /> <GradientStop Offset="1.0" Color="Blue" /> </LinearGradientBrush.GradientStops> </LinearGradientBrush>
XAML-Inhaltseigenschaften
<Border> <TextBox Width="300"/> </Border> <!--explicit equivalent--> <Border> <Border.Child> <TextBox Width="300"/> </Border.Child> </Border>
<Button>I am a <Button.Background>Blue</Button.Background> blue button</Button>
Textinhalt
-
Die Klasse muss eine Inhaltseigenschaft deklarieren, und der Typ dieser Inhaltseigenschaft muss einer Zeichenfolge zugewiesen werden können (der Typ könnte Object lauten). Zum Beispiel verwendet jedes ContentControlContent als Inhaltseigenschaft, es ist vom Typ Object, und dies unterstützt die folgende Verwendung für ein praktisches ContentControl, z. B. einen Button: <Button>Hello</Button>. -
Der Typ muss einen Typkonverter deklarieren. In diesem Fall wird der Textinhalt als Initialisierungstext für diesen Typkonverter verwendet. Beispielsweise <Brush>Blue</Brush>. Dieser Fall ist in der Praxis weniger häufig. -
Der Typ muss eine bekannte XAML-Sprachprimitive sein.
Kombination von Inhaltseigenschaften und Auflistungssyntax
<StackPanel> <Button>First Button</Button> <Button>Second Button</Button> </StackPanel>
Weggelassenes StackPanel.Children-Eigenschaftenelement: StackPanel wird von Panel abgeleitet. Panel definiert Panel.Children als seine XAML-Inhaltseigenschaft. Weggelassenes UIElementCollection-Objektelement: Die Panel.Children-Eigenschaft nimmt den Typ UIElementCollection an, der IList implementiert. Das Elementtag der Auflistung kann ausgelassen werden, entsprechend den Regeln zum Verarbeiten von Auflistungen, z. B. IList. (In diesem Fall kann UIElementCollection nicht instanziiert werden, da kein Standardkonstruktor verfügbar gemacht wird. Deshalb wurde das UIElementCollection-Objektelement auskommentiert).
<StackPanel> <StackPanel.Children> <!--<UIElementCollection>--> <Button>First Button</Button> <Button>Second Button</Button> <!--</UIElementCollection>--> </StackPanel.Children> </StackPanel>
Attributsyntax (Ereignisse)
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="ExampleNamespace.ExamplePage"> <Button Click="Button_Click" >Click Me!</Button> </Page>
<Page.Resources> <SolidColorBrush x:Key="MyBrush" Color="Gold"/> <Style TargetType="Border" x:Key="PageBackground"> <Setter Property="Background" Value="Blue"/> </Style> ... </Page.Resources> <StackPanel> <Border Style="{StaticResource PageBackground}"> ... </Border> </StackPanel>
<Button Margin="10,20,10,30" Content="Click me"/>
<Button Content="Click me"> <Button.Margin> <Thickness Left="10" Top="20" Right="10" Bottom="30"/> </Button.Margin> </Button>
Hinweis
|
|---|
|
|
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ... </Page>
Das Präfix x:
-
x:Key: Legt einen eindeutigen Schlüssel für jede Ressource in einem ResourceDictionary (oder ähnlichen Wörterbuchkonzepten in anderen Frameworks) fest. x:Key wird wohl 90 % der Verwendung von x: im Markup einer typischen WPF-Anwendung ausmachen. -
x:Class: Gibt den CLR-Namespace und -Klassennamen für die Klasse an, die den Code-Behind für eine XAML-Seite angibt. Eine Klasse dieser Art muss vorhanden sein, um den Code-Behind gemäß dem WPF-Programmiermodell unterstützen zu können. Aus diesem Grund ist x: fast immer zugeordnet, auch wenn keine Ressourcen vorhanden sind. -
x:Name: Gibt einen Laufzeitobjektnamen für die Instanz an, die nach der Verarbeitung eines Objektelements im Laufzeitcode vorhanden ist. Im Allgemeinen verwenden Sie häufig eine in WPF definierte entsprechende Eigenschaft für x:Name. Solche Eigenschaften werden speziell einer CLR-Unterstützungseigenschaft zugeordnet und sind so praktischer für die Anwendungsprogrammierung, wo Sie häufig mithilfe von Laufzeitcode die benannten Elemente von initialisiertem XAML-Code suchen. Die gebräuchlichste Eigenschaft dieser Art ist FrameworkElement.Name. Sie könnten weiterhin x:Name verwenden, wenn die entsprechende WPF-Frameworkebene Name-Eigenschaft in einem bestimmten Typ nicht unterstützt wird. Dies ist bei bestimmten Animationsszenarien der Fall. -
x:Static: Ermöglicht einen Verweis, der einen statischen Wert zurückgibt, der nicht anderweitig als XAML-kompatible Eigenschaft festgelegt werden kann. -
x:Type: Erstellt anhand eines Typnamens einen Type-Verweis. Wird verwendet, um Attribute anzugeben, die Type annehmen, wie z. B. Style.TargetType, obwohl die Eigenschaft häufig eine eigene Konvertierung von Zeichenfolgen in Type aufweist, sodass die Markuperweiterungsverwendung von x:Type optional ist.
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:custom="clr-namespace:NumericUpDownCustomControl;assembly=CustomLibrary"
>
<StackPanel Name="LayoutRoot">
<custom:NumericUpDown Name="numericCtrl1" Width="100" Height="60"/>
...
</StackPanel>
</Page>
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="ExampleNamespace.ExamplePage"> <Button Click="Button_Click" >Click Me!</Button> </Page>
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Dim b As Button = e.Source b.Foreground = Brushes.Red End Sub
namespace ExampleNamespace { public partial class ExamplePage { void Button_Click(object sender, RoutedEventArgs e) { Button b = e.Source as Button; b.Foreground = Brushes.Red; } } }
Routingereignisse
<StackPanel Name="buttonContainer"> ... <Button Click="RemoveThis">Click to remove this button</Button> </StackPanel>
Private Sub RemoveThis(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Dim fe As FrameworkElement = e.Source If (buttonContainer.Children.Contains(fe)) Then buttonContainer.Children.Remove(fe) End If End Sub
void RemoveThis(object sender, RoutedEventArgs e) { FrameworkElement fe = e.Source as FrameworkElement; if (buttonContainer.Children.Contains(fe)) { buttonContainer.Children.Remove(fe); } }
<DockPanel> <Button DockPanel.Dock="Left" Width="100" Height="20">I am on the left</Button> <Button DockPanel.Dock="Right" Width="100" Height="20">I am on the right</Button> </DockPanel>
Hinweis