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.