Autor Beitrag
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 07.05.08 01:21 
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:

ausblenden 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:

ausblenden 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:

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 07.05.08 01:40 
Hi,
user profile iconChristian 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?

user profile iconChristian 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 07.05.08 01:44 
user profile iconKlabautermann 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:

ausblenden 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. :)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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
Hält's aus hier
Beiträge: 16

Vista
XAML, C#
BeitragVerfasst: Mi 07.05.08 22:39 
user profile iconKhabarakh 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 08.05.08 12:08 
user profile iconjpkleinau 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.