Entwickler-Ecke
WPF / Silverlight - Page auf Framegröße anpassen
Klabautermann - Mi 07.05.08 01:21
Titel: Page auf Framegröße anpassen
Hallo,
ich experimentiere gerade ein wenig mit WPF rum und möchte nun eine Page in ein Frame einblenden.
Im einzigen Fenster des Projektes habe ich folgenden Frame:
XML-Daten
1:
| <Frame Grid.Column="1" Grid.Row="1" Margin="0.711,0,0,0" Name="FrameWorkarea" Grid.RowSpan="2" Navigated="frame1_Navigated" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Background="Khaki" BorderBrush="Cyan" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> |
in dieses Frame Blende ich diese Page ein:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| <Page x:Class="MyApp.MyPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="My Page" Height="305" Name="page_mypage" MinWidth="300" MinHeight="200" Background="Bisque"> <Grid Name="grid1" Width="466" Height="364" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Grid.ColumnDefinitions> <ColumnDefinition Width="67" /> <ColumnDefinition Width="386*" /> <ColumnDefinition Width="13" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="40" /> <RowDefinition Height="323*" /> </Grid.RowDefinitions> <TextBlock Name="textBlock1" Text="" VerticalAlignment="Stretch" Background="Firebrick" OpacityMask="Firebrick" FontSize="15" Grid.ColumnSpan="3"> <Label Padding="10" Foreground="Brown"><Label.BitmapEffect><OuterGlowBitmapEffect GlowColor="Gold" /></Label.BitmapEffect>Header Text</Label> <TextBlock.BitmapEffect> <DropShadowBitmapEffect /> </TextBlock.BitmapEffect> </TextBlock> <Label Grid.Row="1" Height="26" Margin="9,15,0,0" Name="label1" VerticalAlignment="Top" HorizontalAlignment="Left" Width="59" Grid.ColumnSpan="2">Text</Label> <TextBox Grid.Row="1" Height="23" Margin="0,17,0,0" Name="textBox1" VerticalAlignment="Top" Grid.Column="1" /> </Grid> </Page> |
Das mach mit diesen Zeilen:
C#-Quelltext
1: 2:
| MyApp.MyPage ActPage = new MyApp.MyPage(); FrameWorkarea.Navigate(ActPage); |
Im großen und ganzen funktioniert das auch, allerdings passt sich die Pagegröße leier nicht der Framegröße an. Aufgrund der Hintergrundfarben lässt sich erkennen, das sich die Pagebreite an die Framebreite anpasst, der enthaltene Textblock aber nicht dran denkt dies auch zu tun. Die höhe des der Page bleibt wie designet und das ganze richtet sich schön Mittig im Frame aus, ich hätte es aber gerne füllend.
Da ich wie gesagt noch im Experimentierstadium bin und mich von der Vielzahl der Einstellmöglichkeiten noch ziemlich überwältigt fühle hoffe ich das ihr mir helfen könnt das ganze so hin zu bekommen wie ich es mir wünsche und das sit einfach nur, das die Page Framefüllend erscheint und sich gerne noch der Textblock der entsprechenden Breite anpasst (aber da kann ich auch noch selber experimentieren ;)).
Gruß
Klabautermann
Christian S. - Mi 07.05.08 01:32
Bei der Page gibst Du dem obersten Grid Breite und Höhe, das scheint die Horizontal- und VerticalAlignment außer Kraft zu setzen (zumindest im Falle, dass man es auf Stretch setzt).
Wieso bindest Du ein Label in einen Textblock ein :gruebel:
Klabautermann - Mi 07.05.08 01:40
Hi,
Christian S. hat folgendes geschrieben: |
Bei der Page gibst Du dem obersten Grid Breite und Höhe, das scheint die Horizontal- und VerticalAlignment außer Kraft zu setzen (zumindest im Falle, dass man es auf Stretch setzt). |
Genaugenommen habe ich nur die höhe angegeben, deshalb wurde auch die Breite noch gestreched. Wenn ich beide angaben lösche dann klappt es wie gewünscht. Sehr interessant, nur wie bekomme ich jetzt das Fenster im Designer auf eine Größe in der ich Sinvoll weitere Elemente Plazieren kann ohne mir wieder den Strech Effekt kaputt zu machen?
Christian S. hat folgendes geschrieben: |
Wieso bindest Du ein Label in einen Textblock ein :gruebel: |
Hihi, wie gesagt ich experimentiere noch und hatte bei dem Textblock Probleme die Schrift vom oberen Rand weg zu rücken, mit einem Label ging das. Den ganzen Textblock wollte ich nicht verschieben, da ich dem ja ein paar Hintergrundeffekte verpasst habe. Die PAding eigenschaft habe ich erst später entdeckt ;).
Gruß
Klabautermann
Christian S. - Mi 07.05.08 01:44
Klabautermann hat folgendes geschrieben: |
Sehr interessant, nur wie bekomme ich jetzt das Fenster im Designer auf eine Größe in der ich Sinvoll weitere Elemente Plazieren kann ohne mir wieder den Strech Effekt kaputt zu machen? |
Würde ich über die MinWidth- und MinHeight-Eigenschaft der Page machen. Das sollte ja die kleinste sinnvolle Größe sein, also sollte es auch in der Größe gestaltbar sein.
//edit: Oder so:
C#-Quelltext
1: 2: 3: 4: 5:
| var myPage = new Page1(); myPage.Width = Double.NaN; myPage.Height = Double.NaN;
FrameWorkarea.Navigate(myPage); |
Dann kannst Du die Page im Designer so groß ziehen, wie Du willst. :)
Kha - Mi 07.05.08 17:41
Blend kennt im "http://schemas.microsoft.com/expression/blend/2008"-Namespace noch DesignWidth/Height, der strunzdumme VS-Designer kann damit aber natürlich nichts anfangen :autsch: .
jpkleinau - Mi 07.05.08 22:39
Khabarakh hat folgendes geschrieben: |
Blend kennt im "http://schemas.microsoft.com/expression/blend/2008"-Namespace noch DesignWidth/Height, der strunzdumme VS-Designer kann damit aber natürlich nichts anfangen :autsch: . |
Nee, das sollte ja auch nicht wundern. Der VS-Designer ist ja auch keiner und mit den Blend Internas kann der nix anfangen. Ich ignoriere das Teil vollständig. Die Infos sind ja auch nur für das Design notwendig und sinnvoll, da man ja mit einer angenommenen Breite und Höhe arbeiten muss, ohne dass die Laufzeitbreite bekannt ist.
Kha - Do 08.05.08 12:08
jpkleinau hat folgendes geschrieben: |
Der VS-Designer ist ja auch keiner und mit den Blend Internas kann der nix anfangen. |
Sollte er aber, Punkt :P :mrgreen: . Wenn MS WPF zum Standard machen will, muss es auch für Hobby-Programmierer einen benutzbaren Designer geben, der nicht gleich 600€ kostet.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!