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

답변:


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>

이것은 당신이 추구하는 것을 얻을 것입니다 (단지 2가 아닌 4면 모두에 여백을두기를 원할 수도 있지만 ...)


내가 원하는대로 작동하지 않습니다 ... 내 질문에 코드를 추가했습니다.
Jason94

3
@ Jason94 : 내가 생각하는 것을 얻는 방법을 보여주기 위해 내 답변을 업데이트했습니다 ...
Reed Copsey

@ReedCopsey Reed, 귀하의 솔루션이 작동한다는 것을 알고 있습니다. 내가 이해하지 못하는 것은 Border 요소가 Grid 요소 내부에있는 이유입니다.이 카운터가 직관적이지 않습니까? 감사합니다.
Sabuncu 2013

2
나는 OP의 편집 "작업"만들고 있었다 - @Sabuncu 당신은 내 원래는 것을 가지고 있지 않은 것을 알 수 있습니다
리드 Copsey

1
이것은 내 주 창 내부에 경계선을 배치하고 그 안에 캡슐화 된 그리드 외부 주변이 아닌 것처럼 보입니다. 이유는 무엇입니까?
Brady 2015

9

경계 컨트롤에 그리드를 중첩하는 경우

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

원하는 작업을 수행하지 않는 경우 원하는 작업을 수행하는 그리드 (또는 테두리)에 대한 고유 한 컨트롤 템플릿을 만들어야합니다.


오 ... 좋아요 : D는 내가 간과 한 변수 나 뭔가 멋진 WPF가 있다고 생각했습니다 (새로운 내용입니다 : D)
Jason94

Grid 및 Border에 대한 템플릿은 Control에서 파생 된 것이 아니라 Panel 및 Decorator에서 파생 되었기 때문에 Template 속성이 없기 때문에 만들 수 없습니다. Reed Copsey는 (매우 간단한) 솔루션을 가지고 있습니다.
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 = "다루고 싶은 행"을 테두리 태그에 추가합니다. 그렇지 않으면 첫 번째 셀만 포함합니다.
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);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.