2009-05-13 17 views
19

Estaba jugando con los márgenes y el relleno y encontré que un valor negativo era aceptable y da un buen efecto en las circunstancias apropiadas. Por ejemplo, si tiene un borde con un objeto lleno y desea que el color del objeto relleno sobrepase el borde. Alguien tiene otros?WPF simples consejos y trucos?

Respuesta

3

Calcular la inmobiliaria disponible como un porcentaje:

<Grid.RowDefinitions> 
    <RowDefinition Height="0.25*"/> 
    <RowDefinition Height="0.25*"/> 
    <RowDefinition Height="0.25*"/> 
    <RowDefinition Height="0.25*"/> 
</Grid.RowDefinitions> 

EDIT:

Esto funciona, pero no es indicativo de cómo funciona el parámetro *. Esto:

<Grid.RowDefinitions> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="*"/> 
</Grid.RowDefinitions> 

proporciona la misma funcionalidad. Si quieres algo distinto de filas igual altura que puede utilizar:

<Grid.RowDefinitions> 
    <RowDefinition Height="1*"/> 
    <RowDefinition Height="2*"/> 
    <RowDefinition Height="3*"/> 
    <RowDefinition Height="4*"/> 
</Grid.RowDefinitions> 

que dividirá la altura disponible por 10 y mantener 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.

5

Incluir llaves en el contenido de un control.

<Button Content="{}{This is not a markup extension.}"/> 
7

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">... 
+2

Ah, ahorro de tiempo definido .. –

1

Insertar comillas dobles en el contenido:

<Button Name="Button" 
     Background="AntiqueWhite" 
     Content="{}{Background=&#0034;AntiqueWhite&#0034;}"/> 
11

Una nueva característica de WPF entrega con 3.5 SP1 es la capacidad de formatear su cuerda mientras se encuaderna Elimina el uso de IValueConverter para tales escenarios comunes. Éstos son algunos ejemplos para que te va lo que he copiado de this blog post

<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> 
0

Un Grid con el Background la izquierda por defecto o conjunto con un cepillo Transparent no se disparará el evento IsMouseOver a menos que el cursor se encuentra sobre un control que contiene. Para asegurarse de que el evento se active en el propio Grid, simule Transparency configurando Background en el color del contenedor Background.

+2

no es cierto para los pinceles.Transparente de fondo al menos de .net 4.0 (no sé para las versiones anteriores), pero es cierto para el fondo predeterminado que se establece en "{ x: Null} "y no se comporta como Brushes.Transparent. es decir: si quiere atrapar el mouseDownEvent en un control de fondo transparente, tiene que establecer explícitamente su fondo en Brushes.Transparent – David

5

IsMouseOver y IsMouseDirectlyOver son eventos diferentes. IsMouseOver responde a todos los movimientos del mouse dentro de un control y son hijos. IsMouseDirectlyOver responde solo si el cursor está sobre el control mismo. Por ejemplo, si tiene una etiqueta dentro de un borde, el evento IsMouseDirectlyOver para el borde solo se activa si el cursor está sobre el borde pero NO sobre la etiqueta contenida.

+0

No estoy seguro de si su respuesta responde a la pregunta original, pero sí aclaraba lo que estaba buscando. (+1) – jpierson

0

Un control con el fondo establecido en Transparente NO desencadenará los eventos IsMouseOver o IsMouseDirectlyOver. Por ejemplo, si un Fondo de borde está configurado en Transparente pero BorderBrush = Azul y BorderWidth es <> 0, los eventos MouseOver se dispararán sobre el propio borde pero no sobre el interior del control.

18

Depuración WPF vinculante.

Añadiendo el seguimiento de una propiedad compartida:

<Window … 
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"/> 
    <TextBlock Text="{Binding Path=Caption, 
diagnostics:PresentationTraceSources.TraceLevel=High}"…/> 

Usted recibirá en la ventana de salida mucho más detalles sobre la unión:

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

2

La propiedad es BorderThickness. No importa cuántas veces escriba BorderWidth, ¡no va a funcionar!

7

Visibility es una de tres estados System.Windows.Visibility enumeración:

  • Visible - El elemento obtiene prestados y participa en el diseño.
  • Colapsado: el elemento es invisible y no participa en el diseño. Efectivamente le da un alto y ancho de 0 y se comporta como si no existiera.
  • Oculto - El elemento es invisible pero continúa para participar en el diseño.
3

Padding y Margin se ingresan utilizando la sintaxis delimitada por comas y son de tipo Grosor. Pueden introducirse como:

  • Relleno = "5" (El relleno es de 5 en los cuatro lados)
  • Relleno = "5,10,15,20" (El relleno es de izquierda: 5 Inicio: 10 Derecho : 15 Parte inferior: 20)
  • Relleno = "5,10" (Padding es 5 en la izquierda/derecha y 10 en la superior/inferior)
+0

También puede delimitarlos por espacio simple. Relleno = "5 10 15 20" –

3

Proporcionar una fila única o en la columna para un GridSplitter para asegurar que no está oculto por otros controles y se comporta como se esperaba.

0

establecer una propiedad de código subyacente a un DynamicResource:

Border_Toolbar.SetResourceReference(BackgroundProperty, "Brush_ToolbarBackground") 
2

Decidir dimensiones de un control basado en otro momento de la ejecución.

<... Width="{Binding ElementName=referenceElement, Path=ActualWidth}" ../> 

Esto se puede hacer con Height/MaxHeight etc. también.

Cuestiones relacionadas