2009-08-04 6 views
2

Entschuldigung, ich habe bei der Suche nach Google nicht etwas Nützliches gefunden. Sehr grundlegende Frage, hauptsächlich "Bin ich dumm". Ich weiß, dass StackPanel seinen Kindelementen vollen Raum gibt, aber warum bezieht sich die "Auto" -Eigenschaft auf das PARENT-Element im Falle eines Rahmens. Ich meine, vielleicht habe ich etwas falsch mache, aber dieses Verhalten ist definitiv nicht das, was ich wollte:Silverlight Border - Bin ich dumm?

Pic1 http://img6.imageshack.us/img6/171/20090805002723.jpg

Ok, nach einiger Überlegung ich einen Weg gefunden, die wie folgt aussieht:

Seriously http://img18.imageshack.us/img18/3173/20090805003045.jpg

Aber wirklich, so? Ich meine ein "minimum sized control" mit einem Textfeld (welche Breite ich definieren möchte) und einem Rand darum, und ich brauche diese Art von Baum? Wenn jemand eine bessere Art und Weise hat, bitte sagen Sie mir ...

Chris

PS: Und das, während ich über die schöne UI Zusammensetzung für Silverlight schreibe, und wollte ein einfaches Beispiel geben .. Ich nur sagen, : Legendär!

+0

Nein, du bist nicht dumm, Christian. Besonders für so einen jungen Burschen! – DOK

+0

Verdammt, denke ich muss öfter bei Blend bleiben. Der "Notepad-Ansatz" ist nicht einmal für kleine Beispiele geeignet :-) –

+0

Ich denke, dass du das StackPanel in diesem Beispiel weglassen kannst und bekommst, was du willst. Es hilft dir nicht;) –

Antwort

1

Definitiv nicht dumm. Dies kann sehr verwirrend sein. Ich finde es hilft beim Denken über Layout in WPF/Silverlight zu denken von oben nach unten von der Wurzel der Steuerungshierarchie anstelle von unten nach oben.

Es wird offensichtlich, wenn Sie an die Aufgabe des Stack Panels denken. Er stapelt seine untergeordneten Elemente und setzt ihre Breite auf ihre Breite. Es überschreibt daher die Breite der Grenze von Auto. Der Canvas-Bereich, den Sie später umschlossen haben, versucht nicht, seine untergeordneten Elemente neu anzuordnen, und er überschreibt nicht deren Breite. Die Breite des Stack-Steuerfelds entspricht also der Breite des Begrenzungsbereichs , die TextBox).

Klar wie Schlamm? Hier

ist ein Artikel mit mehr Details: http://msdn.microsoft.com/en-us/library/ms745058.aspx

Und ich empfehle das WPF Buch von Chris Sells & Ian Griffiths aufstehen auf die Feinheiten der WPF/Silverlight-Layout zu beschleunigen.

0

Eine einfache Möglichkeit ist der Stackpanel loszuwerden und benutzen Sie einfach die Vertical und Horizontal es oben links zu halten. Dann setze einfach die Rahmenbreite und belasse die Höhe alleine.

<Grid x:Name="LayoutRoot"> 

    <Border Width="150" BorderBrush="Blue" BorderThickness="1" VerticalAlignment="Top" HorizontalAlignment="Left"> 
     <TextBox Text="I'm Serious" Background="LightBlue" /> 
    </Border> 

</Grid>