Come inserisco un bordo sulla mia griglia in WPF?


119

Come si inserisce un bordo nella griglia in C # / WPF?

Questo è quello che vorrei che fosse, ma mette un bordo attorno all'intera cosa invece del controllo della griglia che metto nella mia applicazione.

<Grid>
    <Border BorderBrush="Black" BorderThickness="2">
        <Grid Height="166" HorizontalAlignment="Left" Margin="12,12,0,0" Name="grid1" VerticalAlignment="Top" Width="479" Background="#FFF2F2F2" />
    </Border>
... and so on ...

1
Cosa intendi per "tutto"? Sospetto che tu abbia qualcos'altro nella tua griglia - dovresti forse pubblicare di cosa si tratta. Il mio sospetto è che tu abbia una sorta di controllo del datagrid così come il tuo contenitore della griglia (che è ciò che hai inserito nel tuo campione e presumibilmente conterrebbe "l'intera cosa") ed è qui che sorge la confusione.
Dan Puzey

Risposte:


213

Se vuoi solo un bordo esterno, il modo più semplice è metterlo in un controllo di confine:

<Border BorderBrush="Black" BorderThickness="2">
    <Grid>
       <!-- Grid contents here -->
    </Grid>
</Border>

Il motivo per cui vedi il bordo riempire completamente il tuo controllo è che, per impostazione predefinita, HorizontalAlignment e VerticalAlignment sono impostati su Stretch. Prova quanto segue:

<Grid>
    <Border  HorizontalAlignment="Left" VerticalAlignment="Top"  BorderBrush="Black" BorderThickness="2">
        <Grid Height="166" HorizontalAlignment="Left" Margin="12,12,0,0" Name="grid1" VerticalAlignment="Top" Width="479" Background="#FFF2F2F2" />
    </Border>
</Grid>

Questo dovrebbe darti quello che stai cercando (anche se potresti voler mettere un margine su tutti e 4 i lati, non solo su 2 ...)


non funziona come voglio ... ho aggiunto del codice alla mia domanda.
Jason94

3
@ Jason94: ho aggiornato la mia risposta per mostrarti come ottenere ciò che penso tu stia cercando ...
Reed Copsey

@ReedCopsey Reed, so che la tua soluzione funziona, quello che non capisco è perché l'elemento Border si trova all'interno dell'elemento Grid - non è contro intuitivo? Grazie.
Sabuncu

2
@ Sabuncu Noterai che il mio originale non lo aveva - stavo facendo "funzionare" la modifica dell'OP
Reed Copsey

1
Questo sembra posizionare un bordo intorno all'interno della mia finestra principale e non intorno all'esterno della griglia che è incapsulata al suo interno. Qualche idea sul perché?
Brady

9

Se annidi la tua griglia in un controllo di confine

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

non fa quello che vuoi, quindi dovrai creare il tuo modello di controllo per la griglia (o il bordo) che FA quello che vuoi.


oh ... okey: D pensava che ci fosse una variabile che ho trascurato o qualcosa di stravagante WPF (sono nuovo a questo: D)
Jason94

Non è possibile creare un Modello per Griglia e Bordo perché non hanno proprietà Template poiché non derivano da Control, ma da Panel e Decorator. Reed Copsey ha la soluzione (piuttosto semplice) .
gehho

2

Penso che il tuo problema sia che il margine dovrebbe essere specificato nel tag del bordo e non nella griglia.


2

Questa è una risposta successiva che funziona per me, se può essere utile a chiunque in futuro. Volevo un bordo semplice attorno a tutti e quattro i lati della griglia e l'ho ottenuto in questo modo ...

<DataGrid x:Name="dgDisplay" Margin="5" BorderBrush="#1266a7" BorderThickness="1"...

Il Gridcontrollo non ha un BorderBrushattributo, ma DataGrid...
ΩmegaMan

1
<Grid x:Name="outerGrid">
    <Grid x:Name="innerGrid">
        <Border BorderBrush="#FF179AC8" BorderThickness="2" />
        <other stuff></other stuff>
        <other stuff></other stuff>
    </Grid>
</Grid>

Questo codice Avvolge un bordo all'interno di "innerGrid"


Ciao @ElvinMammadov. Puoi descrivere di più. Ricevi errori? Questo codice funziona bene per me.
PJ3

1
Devi aggiungere Grid.ColumnSpan = "le colonne che vuoi coprire" Grid.RowSpan = "Le righe che vuoi coprire" nel tag Border. Altrimenti copre solo la prima cella.
user3707094

0

Se qualcuno è interessato al problema simile, ma non funziona con XAML, ecco la mia soluzione:

var B1 = new Border();
B1.BorderBrush = Brushes.Black;
B1.BorderThickness = new Thickness(0, 1, 0, 0); //You can specify here which borders do you want
YourPanel.Children.Add(B1);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.