2011-08-29 14 views
29

L'aspetto di un CheckBox WPF disallinea la porzione di controllo con la parte dell'etichetta (contenuto). Il controllo rimane leggermente al di sopra del contenuto, come mostrato qui:Come posso allineare un CheckBox con il suo contenuto?

enter image description here

Il XAML assomiglia a questo:

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

la casella di controllo è all'interno di una cella della griglia. C'è un modo semplice per rendere il contenuto e controllare le porzioni di un CheckBox XAML allineato verticalmente? Ho provato varie combinazioni di proprietà senza fortuna. Ho visto a similar question here ma la risposta è troppo complessa.

Grazie in anticipo.

MODIFICA: il problema è stato causato da FontSize di Windows che ho impostato su 14. Per ricreare il problema, imposta CheckBox FontSize su 14 (o più). Il mio programma è visto a distanza dagli operai della fabbrica, quindi permetto a Window FontSize di essere aumentato o diminuito dall'utente.

+0

Se si pensa che la modifica del modello di controllo è troppo complesso, allora si sta andando ad avere per accettare il modo in cui il controllo standard il modello è disposto. La modifica * effettiva * che dovresti apportare al modello di controllo, come la modifica apportata alla risposta a cui sei collegato, è semplice. –

+0

Tag ** [non] (http://meta.stackexchange.com/questions/70498/automatic-removal-of-bracketed-tags-from-question-titles) ** appartengono al titolo, tutti quelli che sono pari la familiarità remota con il sito lo sa, se la domanda è contrassegnata come WPF tutti sanno che non si sta parlando di una casella di controllo di WinForms o HTML. Il tag WPF viene persino anteposto automaticamente al titolo della pagina. –

+0

Puoi aggiungermi alla lista di persone che non riescono a riprodurre il tuo problema. Il tuo XAML offre una casella di controllo dall'aspetto normale, senza il problema di layout che mostri nel tuo screenshot. Riesci a riprodurre il tuo problema in un'app di prova indipendente? –

risposta

21

Modifica - Nuovo Risposta: (precedente non andava bene)

Non è il modo migliore credo, ma può fare il lavoro:

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

Utilizzando margine negativo per spingere il contenuto su, risultato: enter image description here

+0

Questo non fa nulla. –

+0

@ H.B scusa, modificato .. – MichaelS

+0

Tutti gli allineamenti e il contentcontrol sono ridondanti, quindi li ho rimossi ... –

14

lo stile predefinito di un CheckBox non sembri che in WPF. Si allinea perfettamente con Windows XP e Windows 7. Puoi fornire una descrizione migliore di come riprodurre questo problema?

Due cose che posso pensare di ottenere l'offset che si sta vedendo è o cambiare il Padding o il VerticalContentAlignment. Il valore predefinito CheckBox per VerticalContentAlignment è Top e un CheckBox con Content ha Padding impostato su "4,0,0,0". Prova a cambiare questi due in giro e vedere se fa alcuna differenza.

Ecco un confronto

enter image description here

Dalla seguente 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

Setting Padding = "4, -2, 0, 0" è una soluzione ragionevole per ora. Grazie. – DeveloperDan

+1

L'ho provato dopo aver visto il tuo commento su 'Window' con' FontSize = "14" ':) –

+1

Vedendo la tua risposta, aggiungere margine alla mia casella di controllo sembra risolverlo per me. –

0

mie caselle di controllo sono allineati bene, quindi mi chiedo che cosa c'è di diverso vostra. L'unica differenza evidente è che si sta utilizzando un carattere più grande di me, che mi ricorda alla seguente domanda:

WPF CheckBox style with the TextWrapping

Il tuo problema potrebbe essere che se il contenuto è un blocco di testo, la casella di controllo è top-giustificato , che può sembrare strano quando viene aumentata la dimensione del carattere.Quindi la mia ipotesi è, provare a utilizzare un AccessText come il contenuto del CheckBox invece:

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

Grazie. La tua risposta mi ha indicato la causa del problema: Window FontSize = "14". Ho provato AccessText ma non l'ho risolto. Probabilmente userò la risposta di MichaelS per dare al contenuto un margine superiore negativo. – DeveloperDan

2

Inserire un CheckBox vuoto e il contenuto come controlli separati in uno StackPanel con orientamento orizzontale. Funziona con qualsiasi dimensione di carattere.

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

Se lo fai in questo modo, il TextBlock non attiva il CheckBox. Devi metterlo nel Contenuto di CheckBox per quel comportamento. – Wouter

35

So che è troppo tardi, ma qui è una soluzione migliore, senza impostare i margini. I margini devono essere impostati in modo diverso per diverse altezze di TextBlock o Checkbox.

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

Ho trovato che era sufficiente specificare l'attributo 'VerticalContentAlignment =" Center "'. In modo più compatto: '' funziona per me – nmarler

+0

Questa è la migliore risposta – DdW

1

Applicando padding superiore negativo funziona bene per il mio layout:

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