2010-07-19 19 views
5

Ho uno stackpanel con caselle di controllo. Non riesco a fare la stessa spaziatura tra le caselle con la proprietà del margineWPF: spaziatura tra gli elementi nello stackpanel

Qualcuno può dirmi cosa sto sbagliando?

Il codice qui sotto mi dà questo:

http://www.shrani.si/f/1Y/M6/4eniAdAw/margin.png http://www.shrani.si/f/1Y/M6/4eniAdAw/margin.png

Come si può vedere, la distanza tra gli elementi non è costante!

<StackPanel MinWidth="150" cal:Bind.Model="{Binding}" Orientation="Horizontal"> 
    <StackPanel.Resources> 
     <Style TargetType="{x:Type CheckBox}"> 
      <Setter Property="Margin" Value="0,0,20,0"/> 
     </Style> 
    </StackPanel.Resources> 
    <CheckBox IsChecked="{Binding IsShown}" Content="{Binding ModuleName, Converter={StaticResource localizeModuleAndFunctionConverter}}" 
       cal:Message.Attach="[Event Click] = [Action FilterShownModuleFunctions]" /> 
</StackPanel> 
+0

Puoi allegare l'immagine qui? – Amsakanna

+0

Sei sicuro che le caselle di controllo siano all'interno di StackPanel? Puoi verificare se sono stati definiti stili globali per Checkbox? – Ragunathan

+1

Questo StackPanel è "standalone" o è il pannello di un ItemsControl di qualche tipo? Nel tuo esempio viene mostrato un solo CheckBox, quindi è difficile capire come l'immagine corrisponde al codice. –

risposta

4

Sto indovinando il tuo problema è il tuo MinWidth = "150" di proprietà. Penso che tu abbia un totale di 5 stackpanel adesso. Hai 4 riquadri ciascuno con la propria casella di controllo. Quindi presumo che tu abbia un quinto pannello stack con i tuoi 4 pannelli stack.

Se questo è vero ... il problema è che ciascuna casella di controllo si trova in un pannello di stack di 150 larghezza (minimo) ma il terzo pannello dello stack è maggiore di 150 perché il testo è così lungo che deve essere più grande per contenere l'intero testo (più il margine di 20).

Rimuovere MinWidth = "150" e penso che otterrete un margine di 20 tra il testo di ciascuna casella di controllo. (se vuoi la spaziatura uniforme tra le caselle effettive delle caselle di controllo, allora dovresti mantenere la larghezza di banda ma renderla abbastanza grande da essere larga almeno quanto la casella di controllo contenente il testo più lungo).

+0

Ah, buona ipotesi. Non ho pensato in questo modo - ho assunto un rapporto uno-a-molti StackPanel-CheckBox, non che ogni CheckBox fosse a parte. Immagino che questo porti alla domanda "perché?" ma questo non è quello che viene chiesto qui ... :) –

+0

Grazie mille. Stavo cambiando il puntello MinWidth, ma non mi ha aiutato. Rimuoverlo ha aiutato come voglio margine tra il testo e non caselle di controllo reali. Prima di fare un'altra domanda, forse posso chiedere qui ... Mi piacerebbe sbarazzarmi della larghezza di impostazione per i pulsanti. Qual è il modo di ridimensionare i pulsanti globalmente in base al loro testo nell'intera applicazione? Questa è una domanda ... la seconda è se ho tre pulsanti uno accanto all'altro, come faccio a impostare tutta la stessa larghezza (la larghezza del pulsante più grande). Spero di avere un senso ... – no9

+0

non importa, l'ho risolto usando uniformgrid! – no9

Problemi correlati