Як я можу встановити рамку моєї сітки в WPF?


119

Як я можу встановити рамку моєї сітки в C # / WPF?

Це те, що я хотів би, щоб це було, але ставить межу навколо всієї справи замість управління сіткою, яку я вклав у свою програму.

<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
Що ви маєте на увазі під "цілою справою"? Я підозрюю, що у вас є щось інше всередині вашої сітки - можливо, ви повинні опублікувати те, що це є. Я підозрюю, що у вас є якийсь контроль управління мережею даних, а також ваш контейнер з сіткою (це те, що ви помістили у свій зразок і, імовірно, містило б "всю справу"), і саме тут виникає плутанина.
Dan Puzey

Відповіді:


213

Якщо ви просто хочете зовнішню межу, найпростіший спосіб - це помістити її в прикордонний контроль:

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

Причина, по якій ви бачите, що межа повністю заповнює ваш контроль, полягає в тому, що за замовчуванням HorizontalAlignment та VerticalAlignment встановлені на Stretch. Спробуйте наступне:

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

Це має отримати те, що ви хочете (хоча ви можете поставити маржу на всі 4 сторони, а не лише на 2 ...)


він не працює, як мені хочеться ... я додав код у своє запитання.
Jason94

3
@ Jason94: Я оновив свою відповідь, щоб показати вам, як отримати те, що, на мою думку, ти шукаєш ...
Рід Копсі

@ReedCopsey Reed, я знаю, що ваше рішення працює, що я не розумію, чому елемент Border знаходиться всередині елемента Grid - чи не це лічильник інтуїтивно зрозумілий? Дякую.
Сабунку

2
@Sabuncu Ви помітите, що в моєму оригіналі цього не було - я робив редагування ОП "робочим"
Рід Копсей

1
Це, здається, розміщує кордон навколо внутрішньої частини мого головного вікна, а не навколо зовнішньої частини сітки, яка є інкапсульованою всередині нього. Будь-які ідеї чому?
Брейді

9

Якщо вкладати сітку в прикордонний контроль

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

не робить те, що ви хочете, тоді вам доведеться зробити власний шаблон управління для сітки (або межі), яка робить те, що ви хочете.


о ... гаразд: D подумав, що є змінною, яку я не помітив, або щось фантазійне WPF (я нове в цьому: D)
Jason94

Ви не можете створити шаблон для сітки та межі, оскільки вони не мають властивості шаблону, оскільки вони не отримані з керування, а з панелі та декоратора. Рід Копсі має (досить просте) рішення .
gehho

2

Я думаю, що ваша проблема полягає в тому, що марж повинен бути вказаний у межі межі, а не в сітці.


2

Це пізніша відповідь, яка працює для мене, якщо вона може бути корисною комусь у майбутньому. Мені хотілося простої межі навколо всіх чотирьох сторін сітки, і я досяг її таким чином ...

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

GridУправління не має BorderBrushатрибут, але 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>

Цей код Загорніть рамку всередині "innerGrid"


Привіт @ElvinMammadov Чи можете ви описати більше. Ви отримуєте помилки? Цей код добре працює для мене.
PJ3

1
Потрібно додати Grid.ColumnSpan = "стовпці, які ви хочете охопити" Grid.RowSpan = "Рядки, які ви хочете охопити", в тег Border. В іншому випадку він охоплює лише першу клітинку.
user3707094

0

Якщо хтось зацікавлений у подібній проблемі, але не працює з XAML, ось моє рішення:

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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.