2014-07-23 21 views
7

Ich verwende Blend Expression und habe gerade mit WPF begonnen.Wie man ein WPF-Fenster reagiert

Ich versuche, ein Fenster reagiert, Fenster zu machen, die mehrere Netze aufnehmen kann und wird gemäß der Fenstergröße zu einer minimalen Breite neu bemessen sein.

Es wird wie:

enter image description here

My-Code So Far:

<Window x:Class="Blend.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" WindowState="Maximized"> 
<Grid> 
<Border CornerRadius="5" BorderBrush="RoyalBlue" BorderThickness="1" 
       Padding="5" HorizontalAlignment="Left" Margin="20,10,0,0" 
       VerticalAlignment="Top" Height="211.5" Width="484.5"> 
<Grid Background="#FFEDF3F8"> 

</Grid> 
</Border> 
<Border CornerRadius="5" BorderBrush="RoyalBlue" BorderThickness="1" 
    Padding="5" Margin="523.333,10,16.334,283.5"> 
    <Grid Background="#FFEDF3F8"/> 
</Border> 
<Border CornerRadius="5" BorderBrush="RoyalBlue" BorderThickness="1" 
    Padding="5" Margin="21.333,234,16.334,144"> 
    <Grid Background="#FFEDF3F8"/> 
</Border> 
<Border CornerRadius="5" BorderBrush="RoyalBlue" BorderThickness="1" 
    Padding="5" Margin="21.333,372,16.334,31.5"> 
    <Grid Background="#FFEDF3F8"/> 
</Border> 
<Button Content="Button" HorizontalAlignment="Left" Margin="626.833,478.5,0,0" 
VerticalAlignment="Top" Width="49" Background="#FF00458C"/> 
<Button Content="Button" HorizontalAlignment="Left" Margin="693.166,478.5,0,0" 
VerticalAlignment="Top" Width="49" Background="#FF00458C"/> 
</Grid> 
</Window> 

ich versucht habe 2 Dinge hier eine ist Margin und andere wird mit 'Alignments' mit Width und Height .

Nicht sicher, die mein Ziel lösen und zweitens wird es an die Bildschirmgröße reagiert oder nicht.

I Lesen Sie mehr über dynamische Grid mit * aber das scheint hier nicht zu arbeiten.

Danke,

+0

Sie sollten die Spalten und Zeilen Ihres Rasters definieren. Haben Sie die [Online-Dokumentation] (http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.aspx) gelesen? Es gibt ein Beispiel. – Clemens

+0

aber was ist, wenn ich das nicht tun will n einfach das ganze Gitter definieren? Ja @Clemens, ich habe das überprüft. –

+0

@Clemens Wie Sie sehen können, schließe ich jedes Raster innerhalb eines Rahmens ein und versuche dann, die Breite/Höhe an diesem Rand und Raster so einzustellen, dass sie nicht richtig angezeigt werden. –

Antwort

13

Sie sind nicht das Raster in der richtigen Art und Weise verwendet wird.

WPF-Grids haben eine Eigenschaft, mit der Spalten und Zeilen festgelegt werden können. Dann würden Sie Elemente in das Raster einfügen und festlegen, in welche Zeile/Spalte sie gehen sollen.

Natürlich können Sie Gitter innerhalb des Gitters haben und so weiter.

Sie können dann mit dem Width = „2 *“ und ähnliches spielen Spalten größer oder kleiner als andere zu machen „reagierend“.

Der folgende Code sollten Sie etwas „ähnlich“ zu dem, was Sie versuchen zu erreichen.

<Grid> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
     <RowDefinition /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <Grid Grid.Row="0" 
      Grid.Column="0" 
      Background="Red" /> 

    <Grid Grid.Row="0" 
      Grid.Column="1" 
      Background="Blue" /> 

    <Grid Grid.Row="1" 
      Grid.Column="0" 
      Grid.ColumnSpan="2" 
      Background="Violet" /> 

    <Grid Grid.Row="2" 
      Grid.Column="0" 
      Grid.ColumnSpan="2" 
      Background="Green" /> 

    <StackPanel Grid.Row="3" 
       Grid.ColumnSpan="2" 
       Orientation="Horizontal"> 
     <Button>OK</Button> 
     <Button>Cancel</Button> 
    </StackPanel> 
</Grid> 

Sie können mit „*“ und „Auto“ für die Breite und Höhe der Säule und Reihen spielen „*“ wird immer als „Prozent“ des aktuellen Windows' Breite oder Höhe definiert. Wenn Sie eine Spalte mit "*" und eine andere mit "2 *" haben, ist die mit "2 *" doppelt so groß wie die mit nur "*", was eine Trennung von 2/3 1/3 ergibt.

Das „Auto“ bedeutet, dass es „die kleinere Breite oder Höhe, die das Innere der Säule zu zeigen, ermöglicht“ stattfinden wird.

+0

wird es auch reagieren? –

+0

Wenn du mit reaktionszeit meinst, dass es sich abhängig von der Fenstergröße neu anordnen wird, dann ja. Es ist der richtige Weg, um dieses Verhalten mit Grids zu haben. – Gimly

+0

Versuchen Sie auch, nicht zu viel Dinge in das XAML zu legen, das verknüpft ist, wie die Elemente aussehen sollten. Es ist ein bisschen wie HTML und CSS, Sie können Stile erstellen und diese Stile auf die Elemente anwenden. – Gimly

Verwandte Themen