A Button
에는 Grid
. 구조는 다음과 같습니다.
<Button>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Viewbox Grid.Column="0">
<TextBlock></TextBlock>
</Viewbox>
<Viewbox Grid.Column="1">
<TextBlock></TextBlock>
</Viewbox>
</Grid>
</Button>
문제는 TextBlock
s 위치가 고정되어 있지 않아 왼쪽 텍스트가 길어지면 격자 선이 오른쪽으로 이동하는 다음과 같은 상황을 볼 수 있습니다. TextBlock
그리드 셀 내부에 s 위치를 고정 하는 방법 (텍스트 길이에 관계없이 중간 그리드 선이 유지됨)?
편집 : 위의 XAML은 TextBlocks의 위치를 그대로 수정하지만 Grid
버튼 안에있는 경우에는 작동하지 않습니다 . 은색 버튼에 파란색 배경이있는 그리드 아래 이미지 : 주로 그리드가 버튼의 다른 영역을 차지하기 때문에 텍스트가 변경되면 (비율은 동일하게 유지되는 동안) 그리드 선이 변경되는 것을 볼 수 있습니다.
그래서 내 진짜 질문은 : Grid
전체 버튼을 차지하는 방법은 무엇입니까? (그리드가 고정되어 있으면 그리드 선도 고정됩니다.)
EDIT2 : 아래는 위의 XAML로 표시되는 Button, Grid, Viewbox, TextBlock 구조를 생성하는 코드입니다. 이 코드 Button
는 녹색 Grid
이 전체 파란색 Button
으로 늘어나지 않고 점유 영역이 내용에 따라 달라지는 아래와 같이 s를 생성합니다 . Grid의 속성을 g.HorizontalAlignment = HorizontalAlignment.Stretch; g.VerticalAlignment = VerticalAlignment.Stretch;
작동하지 않는 것으로 설정 합니다.
Button b = new Button();
b.Background = Brushes.DeepSkyBlue;
Grid g = new Grid();
g.Name = "grid";
g.ShowGridLines = true;
g.Background = Brushes.LimeGreen;
g.HorizontalAlignment = HorizontalAlignment.Stretch;
g.VerticalAlignment = VerticalAlignment.Stretch;
//create columns
for (int i = 0; i < 2; i++)
{
int len = i == 0 ? 3 : 1;
ColumnDefinition cd = new ColumnDefinition();
cd.Width = new GridLength(len, GridUnitType.Star);
g.ColumnDefinitions.Add(cd);
}
//viewbox col 0
Viewbox vb = new Viewbox();
TextBlock tb1 = new TextBlock();
vb.Child = tb1;
Grid.SetRow(vb, 0);
Grid.SetColumn(vb, 0);
g.Children.Add(vb);
//viewbox col 1
Viewbox vb2 = new Viewbox();
TextBlock updown = new TextBlock();
vb2.Child = updown;
//specify the Marlett Font
updown.Style = (Style)Application.Current.FindResource("updownBlock");
Grid.SetRow(vb2, 0);
Grid.SetColumn(vb2, 1);
g.Children.Add(vb2);
//add grid to button
b.Content = g;
이것은 도움이 될 것입니다
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Viewbox Grid.Column="0">
<TextBlock></TextBlock>
</Viewbox>
<Viewbox Grid.Column="1">
<TextBlock></TextBlock>
</Viewbox>
</Grid>
이 예제를 사용하면 그리드는 먼저 필요한 공간을 오른쪽 열에 할당하고 나머지 공간은 왼쪽 열에 할당합니다.
또한 * 높이가 그리드의 기본값 인 1 행으로 행 정의를 제거했습니다.
편집하다
사용 가능한 공간의 가중치 비율을 기반으로 공간을 분배하기 위해 두 열에 별 값으로 가중치를 정의 할 수 있습니다.
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
위의 예에서 그리드는 전체 공간의 1/4에 렌더링 될 오른쪽 열보다 왼쪽 열을 3 배 더 크게 렌더링합니다.
편집하다
그리드가 전체 공간을 차지할 수 있도록 버튼에 HorizontalContentAlignment="Stretch"
& VerticalContentAlignment="Stretch"
를 설정 합니다. 기본적으로 중앙입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다