controles - ¿WPF simples consejos y trucos?
xaml pdf español (15)
Calcula la propiedad inmobiliaria disponible como porcentaje:
<Grid.RowDefinitions>
<RowDefinition Height="0.25*"/>
<RowDefinition Height="0.25*"/>
<RowDefinition Height="0.25*"/>
<RowDefinition Height="0.25*"/>
</Grid.RowDefinitions>
EDITAR:
Esto funciona pero no es indicativo de cómo funciona el parámetro *. Esta:
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
Proporciona la misma funcionalidad. Si quieres algo más que filas de igual altura puedes usar:
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="2*"/>
<RowDefinition Height="3*"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
que dividirá la altura disponible por 10 y mantendrá la altura relativa de cada fila. Alternativamente, los valores podrían ser 0.1, 0.2, 0.3 y 0.4 o cualquier valor proporcional.
Estaba jugando con los márgenes y el relleno y descubrí que un valor negativo era aceptable y da un buen efecto en circunstancias apropiadas. Por ejemplo, si tiene un borde con un objeto relleno y desea que el color del objeto rellenado supere el borde. ¿Alguien tiene alguna otra?
Decida las dimensiones de un control basado en otro en tiempo de ejecución.
<... Width="{Binding ElementName=referenceElement, Path=ActualWidth}" ../>
Esto también se puede hacer con Height/MaxHeight
. Height/MaxHeight
etc.
Depuración de enlace WPF.
Adición de seguimiento de propiedades enlazadas:
<Window …
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"/>
<TextBlock Text="{Binding Path=Caption,
diagnostics:PresentationTraceSources.TraceLevel=High}"…/>
Obtendrá en la ventana de salida muchos detalles sobre el enlace:
PropertyChanged event from SomeObject (hash=1)
SetValue at level 0 from SomeObject (hash= 1) using RuntimePropertyInfo(Field):
''False''
TransferValue - got raw value ''False''
TransferValue - using final value ''False''
// EDITAR Más información here .
Ariel
Establecer un estilo de depuración que proporciona señales visuales:
<Window.Resources>
<Style x:Key="DebugGrid" TargetType="Grid">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="ShowGridLines" Value="True"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid Name="Grid"
Style="{StaticResource DebugGrid}"
Background="Black">...
Establezca una propiedad en Código detrás de un DynamicResource:
Border_Toolbar.SetResourceReference(BackgroundProperty, "Brush_ToolbarBackground")
Incluir llaves en el contenido de un control.
<Button Content="{}{This is not a markup extension.}"/>
Insertar comillas dobles en el contenido:
<Button Name="Button"
Background="AntiqueWhite"
Content="{}{Background="AntiqueWhite"}"/>
La propiedad es BorderThickness . No importa cuántas veces escriba BorderWidth, ¡no va a funcionar!
Proporcione una fila o columna única para un GridSplitter
para asegurarse de que no esté oculto por otros controles y se comporte como se espera.
Un control con el fondo establecido en Transparente NO activará los eventos IsMouseOver o IsMouseDirectlyOver. Por ejemplo, si un Fondo de borde se establece en Transparente pero el Borde de borde = Azul y el Ancho de borde es <> 0, los eventos de MouseOver se activarán sobre el propio Borde pero no sobre el interior del control.
Una Grid
con el Background
dejado como predeterminado o establecido con un pincel Transparent
no IsMouseOver
evento IsMouseOver
menos que el cursor esté sobre un control que contiene. Para asegurarse de que el evento se dispare sobre la Grid
, simule la Transparency
estableciendo el Background
en el color de Background
del contenedor.
Una nueva característica de WPF entregada con 3.5 SP1 es la capacidad de formatear su cadena mientras se enlaza. Elimina el uso de IValueConverter
para tales escenarios comunes. Aquí hay algunos ejemplos para comenzar, que copié de esta publicación del blog.
<TextBox Text="{Binding Path=Double, StringFormat=F3}"/>
<TextBox Text="{Binding Path=Double, StringFormat=Amount: {0:C}}"/>
<TextBox Text="{Binding Path=Double, StringFormat=Amount: /{0:C/}}"/>
<TextBox>
<TextBox.Text>
<Binding Path="Double" StringFormat="{}{0:C}"/>
</TextBox.Text>
</TextBox>
IsMouseOver
e IsMouseDirectlyOver
son eventos diferentes. IsMouseOver
responde a todos los movimientos del mouse dentro de un control y sus hijos. IsMouseDirectlyOver
responde solo si el cursor está sobre el propio control. Por ejemplo, si tiene una etiqueta dentro de un borde, el evento IsMouseDirectlyOver
para el IsMouseDirectlyOver
solo se dispara si el cursor está sobre el borde en sí pero NO sobre la etiqueta contenida.
Padding
y el Margin
se ingresan usando una sintaxis delimitada por comas y son de tipo Grosor. Se pueden introducir como:
- Relleno = "5" (el relleno es 5 en los cuatro lados)
- Relleno = "5,10,15,20" (El relleno es izquierdo: 5 Parte superior: 10 Derecho: 15 Parte inferior: 20)
- Relleno = "5,10" (el relleno es 5 en la parte izquierda / derecha y 10 en la parte superior / inferior)
Visibility
es una enumeración System.Windows.Visibility tres estados:
- Visible: el elemento se representa y participa en el diseño.
- Contraído: el elemento es invisible y no participa en el diseño. Dándole efectivamente una altura y una anchura de 0 y comportándose como si no existiera.
- Oculto: el elemento es invisible pero continúa participando en el diseño.