2016-11-08 1 views
0

Ich habe ein Raster in meiner WPF-Anwendung, die derzeit horizontal und vertikal zentriert ist, keine große Sache. Ich möchte jedoch mein gesamtes Grid nach einer einzigen Grid-Zelle anstatt des gesamten Grids zentrieren. Ist das möglich? Hier ist eine kleine Illustration dessen, was ich erreichen möchte. Ich möchte, dass das rote Kreuz das Zentrum ist. enter image description here Das erste Bild zeigt das gesamte Raster (das Raster ist das grüne Quadrat) zentriert, das zweite Bild zeigt das gesamte Raster zentriert nach der Zelle mit dem roten Kreuz. Ist das in XAML möglich? Ich habe keinen Code absichtlich bereitgestellt, weil ich nicht wirklich denke, dass das für diese Frage notwendig ist, es ist nicht so, als hätte ich einen Fehler oder etwas, das nicht funktioniert, ich habe nur keine Ahnung, wie ich das erreichen würde.Center Grid nach Rasterzelle in WPF

+0

So möchten Sie das Rote Kreuz, um die Größe in der Mitte des Bildschirms zu sein, nicht wahr? nicht das gesamte Grid, das diese Zelle enthält, sondern nur die Zelle selbst. –

+0

@LupuSilviu Ich habe ein Update gemacht, hoffe es macht jetzt mehr Sinn? – Markinson

+0

Vielleicht, wenn Sie erklären, welches Problem Sie lösen möchten und nicht, wie Sie diese spezifische Lösung implementieren, können die Leute bessere Antworten (und eine bessere Gesamtlösung) liefern. Was ist der Zweck dieses Layouts? – ndonohoe

Antwort

2

Es gibt äußere Gitter, innere Gitter und Elemente, die zentriert werden sollen. Äußeres und inneres Gitter haben gleiche Zeilen- und Spaltengewichte. Layout passt sich

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="2*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

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

    <Grid Grid.Column="1" Grid.ColumnSpan="3" 
      Background="LightGray" 
      Grid.Row="0" Grid.RowSpan="2"> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

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

     <Border Grid.Row="1" Grid.RowSpan="2" Grid.Column="0" Grid.ColumnSpan="2" 
      Background="Cyan"/> 
    </Grid> 
</Grid> 

screen shot

0

Die einzige Möglichkeit, wie Sie dies erreichen können, ist nur, wenn Ihre UI-Komponenten eine feste Größe haben. Hier ist ein Codebeispiel, wie ich erreicht habe, was Sie gefragt haben.

<Window x:Class="StackStuff.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:StackStuff" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<DockPanel> 
    <Grid HorizontalAlignment="Center" VerticalAlignment="Center" Background="Red" 
      Width="150" Height="100" ClipToBounds="False"> 

     <Border Margin="0,-150,-30,0" BorderBrush="Black" BorderThickness="1" Height="50" 
       Width="180"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="50"/> 
        <ColumnDefinition Width="130"/> 
       </Grid.ColumnDefinitions> 

       <Border Grid.Column="0" BorderThickness="1" BorderBrush="Black"/> 
       <Border Grid.Column="1" BorderThickness="1" BorderBrush="Black"/> 

      </Grid> 
     </Border> 

     <Border Margin="0,0,-180,0" BorderBrush="Black" BorderThickness="1" 
       Width="30" Height="100"> 

     </Border> 
    </Grid> 
</DockPanel> 

Wie Sie sehen können, hat es sich für alle die Zellen fixiert.