WPF'de ızgarama nasıl sınır koyarım?


119

C # / WPF'de ızgarama nasıl kenarlık koyarım?

Bu olmasını istediğim şey bu, ancak başvuruma koyduğum şebeke kontrolü yerine her şeyin etrafına bir sınır koyuyor.

<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
"Her şey" ile ne demek istiyorsun? Izgaranızın içinde başka bir şey olduğundan şüpheleniyorum - belki de ne olduğunu göndermelisiniz. Şüphem, bir çeşit datagrid kontrolünüzün yanı sıra ızgara konteynırınızın (örneğinize koyduğunuz şeydir ve muhtemelen "her şeyi" içerecektir) ve karışıklığın ortaya çıktığı yer burasıdır.
Dan Puzey

Yanıtlar:


213

Sadece bir dış sınır istiyorsanız, en kolay yol onu bir Sınır kontrolüne yerleştirmektir:

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

Kenarlığın kontrolünüzü tamamen doldurduğunu görmenizin nedeni, varsayılan olarak HorizontalAlignment ve VerticalAlignment'ın Stretch olarak ayarlanmasıdır. Takip etmeyi dene:

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

Bu size peşinde olduğunuz şeyi almalı (ancak sadece 2 değil 4 tarafa da bir marj koymak isteyebilirsiniz ...)


istediğim gibi çalışmıyor ... soruma bazı kodlar ekledim.
Jason94

3
@ Jason94: Peşinde olduğunuzu düşündüğüm şeyi nasıl elde edeceğinizi göstermek için cevabımı güncelledim ...
Reed Copsey

@ReedCopsey Reed, çözümünüzün işe yaradığını biliyorum, anlamadığım şey, Sınır öğesinin neden Izgara öğesinin içinde olduğu - bu sezgisel değil mi? Teşekkür ederim.
Sabuncu

2
@Sabuncu Orijinalimde buna sahip olmadığını fark edeceksiniz - OP'nin "iş" düzenlemesini yapıyordum
Reed Copsey

1
Görünüşe göre bu, ana penceremin iç tarafına bir sınır yerleştiriyor ve içinde bulunan ızgaranın dışına değil. Herhangi bir fikriniz neden?
Brady

9

Izgaranızı bir sınır kontrolüne yerleştiriyorsanız

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

istediğinizi yapmazsa, istediğiniz şeyi YAPAN ızgara (veya sınır) için kendi kontrol şablonunuzu oluşturmanız gerekecektir.


oh ... okey: D gözden kaçırdığım bir değişken veya süslü bir WPF olduğunu düşündü (bu konuda
yeniyim

Kontrol'den değil Panel ve Dekoratör'den türetildikleri için Şablon özelliği olmadığı için Izgara ve Kenarlık için Şablon oluşturamazsınız. Reed Copsey'de (oldukça basit) bir çözüm var .
gehho

2

Sanırım probleminiz, marjın ızgarada değil, border etiketinde belirtilmesi gerektiğidir.


2

Bu, gelecekte herhangi birinin işine yarayacaksa, benim için işe yarayan daha sonraki bir cevaptır. Izgaranın dört bir yanında basit bir sınır istedim ve bunu öyle başardım ...

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

GridKontrolü yoktur BorderBrushniteliği, ama DataGridyapar ...
Ω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>

Bu kod, "innerGrid" içine bir kenarlık sarın


Merhaba @ElvinMammadov. Daha fazlasını anlatabilir misin? Herhangi bir hata alıyor musunuz? Bu kod benim için iyi çalışıyor.
PJ3

1
Eklemeniz gerekiyor Grid.ColumnSpan = "Kaplamak istediğiniz sütunlar" Grid.RowSpan = "Kaplamak istediğiniz satırlar" Border etiketinde. Aksi takdirde yalnızca ilk hücreyi kaplar.
user3707094

0

Birisi benzer sorunla ilgileniyor ancak XAML ile çalışmıyorsa, işte benim çözümüm:

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.