2011-08-29 19 views
29

El aspecto de un CheckBox de WPF desalinea la parte del cheque con la parte de la etiqueta (contenido). El cheque se mantiene ligeramente por encima del contenido, como se muestra aquí:¿Cómo puedo alinear un CheckBox con su contenido?

enter image description here

El XAML es así:

<CheckBox Content="Poorly aligned CheckBox" Margin="9"/> 

la casilla de verificación se encuentra dentro de una celda de cuadrícula. ¿Existe alguna forma sencilla de hacer que el contenido y las partes de un XAML CheckBox se alineen verticalmente? He intentado varias combinaciones de propiedades sin suerte. Vi a similar question here pero la respuesta es demasiado compleja.

Gracias de antemano.

EDITAR: El problema fue causado por Window FontSize que establecí en 14. Para volver a crear el problema, establezca CheckBox FontSize en 14 (o más). Mi programa es visto a distancia por los trabajadores de la fábrica, así que dejo que Window FontSize aumente o disminuya por el usuario.

+0

Si usted piensa que la edición de la plantilla de control es demasiado compleja, entonces van a tener que aceptar la forma en que el control estándar plantilla se presenta. El * cambio * real que necesitaría realizar en la plantilla de control, como el cambio realizado en la respuesta a la que se vinculó, es simple. –

+0

Etiquetas ** [no] (http://meta.stackexchange.com/questions/70498/automatic-removal-of-bracketed-tags-from-question-titles) ** pertenecen al título, todos los que están parejos remotamente familiar con el sitio lo sabe, si la pregunta está etiquetada como WPF, todos saben que no está hablando de una casilla de verificación de WinForms o HTML. La etiqueta WPF incluso se agrega automáticamente al título de la página. –

+0

Puede agregarme a la lista de personas que no pueden reproducir su problema. Su XAML produce una casilla de verificación de aspecto normal, sin el problema de diseño que muestra en su captura de pantalla. ¿Puedes reproducir tu problema en una aplicación de prueba independiente? –

Respuesta

21

Editar - Nueva Respuesta: (anterior no era bueno)

No

la mejor manera creo, pero puede hacer el trabajo:

<CheckBox> 
    <TextBlock Text="Poorly aligned CheckBox" Margin="0,-2,0,0"/> 
</CheckBox> 

Usando margen negativo para empujar el contenido hacia arriba, resultado: enter image description here

+0

Esto no hace nada en absoluto. –

+0

@ H.B lo siento, lo he editado .. – MichaelS

+0

Todas las alineaciones y el control de contenido son redundantes, así que los eliminé ... –

14

El estilo predeterminado de CheckBox no se ve así en WPF. Se alinea perfectamente tanto en XP como en Windows 7. ¿Puedes dar una mejor descripción de cómo reproducir este problema?

Dos cosas que puedo pensar para obtener la compensación que está viendo es cambiar Padding o VerticalContentAlignment. El valor predeterminado CheckBox para VerticalContentAlignment es Top y CheckBox con Content tiene Padding establecido en "4,0,0,0". Intenta cambiar estos dos puntos y ver si hace alguna diferencia.

Aquí es una comparación

enter image description here

De la siguiente Xaml

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <CheckBox Grid.Row="0" 
       Content="Poorly aligned CheckBox" Margin="9" /> 
    <CheckBox Grid.Row="1" 
       Content="Padding=4,4,0,0" Margin="9" Padding="4,4,0,0"/> 
    <CheckBox Grid.Row="2" 
       Content="Vertical Center" Margin="9" 
       VerticalContentAlignment="Center"/> 
    <CheckBox Grid.Row="3" 
       Content="Vertical Top" Margin="9" 
       VerticalContentAlignment="Top"/> 
</Grid> 
+0

Ajuste Padding = "4, -2, 0, 0" es una solución razonable por ahora. Gracias. – DeveloperDan

+1

Lo intenté después de ver tu comentario sobre 'Window' teniendo' FontSize = "14" ':) –

+1

Al ver tu respuesta, agregar margen a mi casilla de verificación parece resolverlo por mí. –

0

Mis casillas de verificación están alineados bien, así que me pregunto lo que es diferente de la suya. La única diferencia aparente es que está utilizando un tipo de letra más grande que yo, que me recuerda a la siguiente pregunta: ¿

WPF CheckBox style with the TextWrapping

Su problema puede ser que si el contenido es un bloque de texto, la casilla de verificación es de primera justificado , que puede parecer extraño cuando se aumenta el tamaño de la fuente.Así que yo creo, trate de usar un AccessText como el contenido de la casilla de verificación en su lugar:

<CheckBox Margin="9"><AccessText>Better aligned CheckBox?</AccessText></CheckBox> 
+0

Gracias. Su respuesta me indicó la causa del problema: Window FontSize = "14". Probé AccessText pero eso no lo solucionó. Probablemente usaré la respuesta de MichaelS de darle al contenido un Margen superior negativo. – DeveloperDan

2

Place Una casilla de verificación vacía y el contenido como controles separados en un StackPanel con orientación horizontal. Esto funciona con cualquier tamaño de letra.

<StackPanel Orientation="Horizontal"> 
    <CheckBox VerticalAlignment="Center" /> 
    <TextBlock VerticalAlignment="Center" Text="Option X" /> 
</StackPanel /> 
+6

Si lo hace de esta manera, al hacer clic en el Bloque de texto no se activará CheckBox. Debe colocarlo en el Contenido de CheckBox para ese comportamiento. – Wouter

35

Sé que es demasiado tarde, pero aquí hay una solución mejor, sin establecer márgenes. Los márgenes deben establecerse de manera diferente para diferentes alturas de TextBlock o Checkbox.

<CheckBox VerticalAlignment="Center" VerticalContentAlignment="Center"> 
    <TextBlock Text="Well aligned Checkbox" VerticalAlignment="Center" /> 
</CheckBox> 
+8

Encontré que especificar el atributo 'VerticalContentAlignment =" Center "' era suficiente. Así que de forma más compacta: '' funciona para mí – nmarler

+0

Esta es la mejor respuesta – DdW

1

La aplicación de relleno superior negativo funciona bien para mi diseño:

<CheckBox Content="Poorly aligned CheckBox" Padding="4,-3,0,0" Margin="9"/> 
Cuestiones relacionadas