2010-09-24 12 views
27

Gibt es eine Möglichkeit, den Stil von Gitternetzlinien im wpf-Gitter zu ändern? Ich muss Gitter in 4 Zellen teilen. Um dies zu tun, habe ich RowDefinitions und ColumnDefinitions verwendet. Allerdings muss der Benutzer unterscheiden, welche Zelle welche ist, deshalb muss ich die Farbe der Gitternetzlinien ändern.wpf gridlines - Ändern des Stils

Antwort

78

Es hängt von dem Aussehen ab, das Sie anstreben. In WPF gibt es verschiedene Möglichkeiten, fast alles zu tun. Hier sind ein paar der leichteren.

Der einfachste Weg ist Showgridlines = „True“ gesetzt:

<Grid HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" 
      Margin="5" 
      ShowGridLines="True"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 

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

     <TextBlock Grid.Column="0" 
        Grid.Row="0" 
        Text="(0,0)" /> 
     <TextBlock Grid.Column="1" 
        Grid.Row="0" 
        Text="(1,0)" /> 
     <TextBlock Grid.Column="0" 
        Grid.Row="1" 
        Text="(0,1)" /> 
     <TextBlock Grid.Column="1" 
        Grid.Row="1" 
        Text="(1,0)" /> 
    </Grid> 

Dass Sie Gitter so etwas wie gibt:
alt text

Sie auch auf ein Rechteck in jeder Zelle des Gitters können verschiedene Effekte erzielen. Hier ist die Fill transparent und der Anschlag ist Blau:

<Grid HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch" 
     Margin="5"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

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

    <Rectangle Grid.Column="0" 
       Grid.Row="0" 
       Stroke="Blue" 
       Fill="Transparent" /> 
    <TextBlock Grid.Column="0" 
       Grid.Row="0" 
       Text="(0,0)" /> 
    <Rectangle Grid.Column="1" 
       Grid.Row="0" 
       Stroke="Blue" 
       Fill="Transparent" /> 
    <TextBlock Grid.Column="1" 
       Grid.Row="0" 
       Text="(1,0)" /> 
    <Rectangle Grid.Column="0" 
       Grid.Row="1" 
       Stroke="Blue" 
       Fill="Transparent" /> 
    <TextBlock Grid.Column="0" 
       Grid.Row="1" 
       Text="(0,1)" /> 
    <Rectangle Grid.Column="1" 
       Grid.Row="1" 
       Stroke="Blue" 
       Fill="Transparent" /> 
    <TextBlock Grid.Column="1" 
       Grid.Row="1" 
       Text="(1,0)" /> 
</Grid> 

Das erzeugt diese:
alt text

Alternativ können Sie die Rectangles füllen kann und nicht geben ihnen einen Schlaganfall:

<Grid HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" 
      Margin="5"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 

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

     <Rectangle Grid.Column="0" 
        Grid.Row="0" 
        Fill="LightBlue" /> 
     <TextBlock Grid.Column="0" 
        Grid.Row="0" 
        Text="(0,0)" /> 
     <Rectangle Grid.Column="1" 
        Grid.Row="0" 
        Fill="LightYellow" /> 
     <TextBlock Grid.Column="1" 
        Grid.Row="0" 
        Text="(1,0)" /> 
     <Rectangle Grid.Column="0" 
        Grid.Row="1" 
        Fill="LightYellow" /> 
     <TextBlock Grid.Column="0" 
        Grid.Row="1" 
        Text="(0,1)" /> 
     <Rectangle Grid.Column="1" 
        Grid.Row="1" 
        Fill="LightBlue" /> 
     <TextBlock Grid.Column="1" 
        Grid.Row="1" 
        Text="(1,0)" /> 
    </Grid> 

Das kann zum Beispiel ein Schachbrettmuster ergeben:
alt text

Dies ist keineswegs eine umfassende Antwort - Sie könnten wahrscheinlich ein Buch füllen. Es sollte nur zeigen, dass es viele Möglichkeiten gibt, um das zu tun, was Sie fragen, und dass es einige ziemlich schnelle und einfache Lösungen gibt, wenn das alles ist, was Sie brauchen.

+1

Dann, wie erhalten Sie Gitterlinien, die ein Pixel breit sind? –

+0

Aber das wird innere Grenzen haben die doppelte Breite –

+6

@WonkotheSane: Das wird nicht funktionieren. 'StrokeThickness' ist ein einfaches' Double'. Um etwas Ähnliches zu erreichen, verwenden Sie einen 'Border' anstelle eines' Rectangle': ' ' –

Verwandte Themen