|
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
|
Traducción
Original
|
Información general sobre XAML (WPF)
Este tema contiene las secciones siguientes.
- ¿Qué es XAML?
- Resumen de sintaxis de XAML
- El uso de mayúsculas y minúsculas y del espacio en blanco en XAML
- Extensiones de marcado
- Convertidores de tipos
- Elementos raíz XAML y espacios de nombres XAML
- Prefijos personalizados y tipos personalizados en XAML
- Eventos y el código XAML subyacente
- Elementos XAML con nombre
- Propiedades y eventos asociados
- Tipos base y XAML
- Seguridad XAML
- Cargar XAML desde el código
- Pasos adicionales
- Temas relacionados
<StackPanel> <Button Content="Click Me"/> </StackPanel>
Elementos de objeto XAML
<StackPanel> <Button Content="Click Me"/> </StackPanel>
Sintaxis de atributos (propiedades)
<Button Background="Blue" Foreground="Red" Content="This is a button"/>
Sintaxis de elementos de propiedad
<Button> <Button.Background> <SolidColorBrush Color="Blue"/> </Button.Background> <Button.Foreground> <SolidColorBrush Color="Red"/> </Button.Foreground> <Button.Content> This is a button </Button.Content> </Button>
Sintaxis de colecciones
<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>
Propiedades del contenido XAML
<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>
Contenido de texto
-
La clase debe declarar una propiedad de contenido y esa propiedad de contenido debe ser de un tipo asignable a una cadena (el tipo podría ser Object). Por ejemplo, cualquier control ContentControl usa la propiedad Content como su propiedad de contenido y es del tipo Object. Esto admite el uso siguiente en un control ContentControl práctico como Button: <Button>Hello</Button>. -
El tipo debe declarar un convertidor de tipos, en cuyo caso el contenido de texto se usa como texto de inicialización para ese convertidor de tipos. Por ejemplo: <Brush>Blue</Brush>. Este caso es menos común en la práctica. -
El tipo debe ser una primitiva conocida del lenguaje XAML.
Propiedades de contenido y sintaxis de colección combinadas
<StackPanel> <Button>First Button</Button> <Button>Second Button</Button> </StackPanel>
Elemento de la propiedad StackPanel.Children omitido: StackPanel se deriva de Panel. Panel define Panel.Children como su propiedad de contenido XAML. Elemento de objeto UIElementCollection omitido: La propiedad Panel.Children toma el tipo UIElementCollection, que implementa IList. Se puede omitir la etiqueta de elemento de la colección, según las reglas del código XAML para procesar colecciones como IList. (En este caso, no se pueden crear realmente instancias de UIElementCollection, porque no expone un constructor predeterminado y, por eso, el elemento de objeto UIElementCollection se muestra marcado como comentario).
<StackPanel> <StackPanel.Children> <!--<UIElementCollection>--> <Button>First Button</Button> <Button>Second Button</Button> <!--</UIElementCollection>--> </StackPanel.Children> </StackPanel>
Sintaxis de atributos (eventos)
<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>
Nota
|
|---|
|
|
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ... </Page>
El prefijo x:
-
x:Key: Establece una clave única para cada recurso de un ResourceDictionary (o conceptos de diccionario similares en otros marcos). Probablemente x:Key representará el 90% de los usos de x: que verá en un marcado de aplicación WPF típica. -
x:Class: especifica el espacio de nombres de CLR y el nombre de la clase que proporciona código subyacente para una página XAML. Debe disponer de esta clase para admitir el código subyacente por el modelo de programación WPF; por esto casi siempre verá x: asignado, aun cuando no haya ningún recurso. -
x:Name: especifica un nombre de objeto en tiempo de ejecución para la instancia que existe en el código en tiempo de ejecución una vez procesado un elemento de objeto. En general, utilizará frecuentemente una propiedad equivalente definida por WPF para X:Name. Tales propiedades asignan específicamente a una propiedad de respaldo de CLR y así son más útiles para la programación de aplicaciones, donde frecuentemente se utiliza código del tiempo de ejecución para encontrar los elementos con nombre de XAML inicializado. La propiedad de este tipo más común es FrameworkElement.Name. Todavía podría utilizar X:Name cuando la propiedad Name del nivel de marco WPF equivalente no se admite en un tipo determinado. Esto sucede en ciertos escenarios de animación. -
x:Static: habilita una referencia que obtiene un valor estático que, de lo contrario, no sería una propiedad compatible con XAML. -
x:Type: construye una referencia Type basada en un nombre de tipo. Esto se utiliza para especificar atributos que toman valores Type, como Style.TargetType, aunque con frecuencia la propiedad dispone de una conversión de cadena a Type nativa y el uso de la extensión de marcado x:Type es opcional.
<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; } } }
Eventos enrutados
<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>
Nota