2016-04-13 9 views
0

Der folgende Code scheint die Linie nicht vertikal zu zentrieren; z.B. die Strichstärke scheint nicht in der Anordnung die Linie berücksichtigt werden: Was fehltVertikal eine Linie in WPF zentrieren

<Grid VerticalAlignment="Center" Width="32" Height="32"> 
    <Line Stretch="None" HorizontalAlignment="Stretch" VerticalAlignment="Center" X2="32" 
     Stroke="Black" 
     StrokeThickness="{Binding StrokeThickness}" /> 
</Grid> 

?

+0

Sind Sie sicher, dass Ihre Bindung funktioniert? Sie sollten die Ausgabe auf Datenbindungsfehler prüfen. Versuchen Sie, StrokeThickness manuell auf eine Zahl zu setzen, um sicherzustellen, dass StrokeThickness selbst OK ist. – lexa

+0

Wie könnte ich die Zeile sehen, wenn die Bindung nicht funktioniert? – sam

+0

Ich nehme an, dass Sie eine Art von Modell verwenden (auf das von DataContent der übergeordneten ui-Elemente verwiesen wird). Wenn dies fehlschlägt und DataContext null bleibt, funktioniert die Bindung nicht. So überprüfen Sie, ob es Null ist: versuchen Sie StrokeThickness = "{Binding StrokeThickness, FallbackValue = 100}". In diesem Fall haben Sie eine Dicke von 100, wenn DataContext null ist. – lexa

Antwort

1

ich denke, es etwas zu tun haben mit StrokeThickness nicht die DesiredSize des Line Element zu ändern, aber Sie können es umgehen:

<Canvas VerticalAlignment="Center" Width="32" Height="32"> 
    <Line Stretch="None" X2="32" Y1="16" Y2="16" 
      Stroke="Black" 
      StrokeThickness="15" /> 
</Canvas> 

Oder:

Die Grid kann mit einem Canvas ersetzt werden , wenn Sie die äußere Grid benötigen, wickeln Sie die Line in eine Canvas:

<Grid VerticalAlignment="Center" Width="32" Height="32" > 
    <Canvas VerticalAlignment="Center"> 
     <Line Stretch="None" X2="32" 
       Stroke="Black" 
       StrokeThickness="15" /> 
    </Canvas> 
</Grid> 
+0

Perfekt! Woher wusstest du, dass es sich um ein Gitterproblem handelt und die Leinwand darum herum funktioniert? – sam

+0

Ich hatte Erfahrung mit einem dicken Rahmen, der vorher abgeschnitten wurde, also wusste ich, dass 'StrokeThickness' die' DesiredSize' nicht ändert und 'Grid' viel arrangiert, so dass es wahrscheinlich durch den dicken' 'verwechselt wird Linie ". Mithilfe von [Snoop] (https://snoopwpf.codeplex.com/) wurde schnell bestätigt, was passiert ist. –

Verwandte Themen