문제

다음 그리드 행 정의가있는 간단한 XAML 컨트롤이 있습니다.

<Grid.RowDefinitions>
            <RowDefinition Height="15*" />
            <RowDefinition Height="60*" />
            <RowDefinition Height="20*" />
            <RowDefinition Height="20*" />
            <RowDefinition Height="15*" />
</Grid.RowDefinitions>

행 1-3 각각 텍스트 블록을 보유하고있는 텍스트 블록이 있습니다. 뒤에있는 코드에서 텍스트가 없으면 RowDefinition을 최소화하고 싶습니다. 본질적으로 나는 내 코드에 다음을 가지고 있습니다.

if(textblock.Text != ""){
   grid.RowDefinitions[elementRow].Height = new GridLength(20, GridUnitType.Star);
}
else{
   grid.RowDefinitions[elementRow].Height = new GridLength(0, GridUnitType.Star);
}

나는 XAML에 정의 된 상태에서 0과 4가 유지되기를 원합니다. 불행히도 행 2의 텍스트 블록에 텍스트가 있지만 아무것도 표시되지 않더라도 이것은 작동하지 않습니다.

내가 뭔가 잘못하고 있니?

모든 도움이 감사합니다.

제임스

도움이 되었습니까?

해결책

별 표기법을 사용하지 말고 RowDefinitions에 자동 사용하십시오. TextBlock.text가 비어 있으면 TextBlock의 가시성을 Visibility.collapsed로 설정하십시오. 그리드 행은 자동으로 아무것도 줄어들지 않습니다.

다른 팁

이것은 귀하의 질문에 대한 답이 아니라 정보 만 있습니다.

*높이 (또는 열의 너비)는 행 (또는 열) 너비 높이 = "*"(또는 너비 = "*")가 나머지 공간을 차지한다는 것을 의미합니다. 따라서 높이 = "100"인 그리드에 4 행이있는 그리드가있는 경우 :이 경우 :

<Grid.RowDefinitions>
            <RowDefinition Height="10" />
            <RowDefinition Height="10" />
            <RowDefinition Height="10" />
            <RowDefinition Height="*" />
</Grid.RowDefinitions>

행 너비 높이 = "*"는 70 DIU (장치 독립 장치)입니다.

별표 (height = "2*") 앞에 숫자를 추가하면 별표를 사용하여 두 줄 이상의 행이있는 경우에만 작동하며 별표 앞의 숫자는 특정 행이 얼마나 더 많은 공간을 취할 것인지를 나타냅니다 (2* = 두 배, 3* 세 배나 ...). 즉:

<Grid.RowDefinitions>
            <RowDefinition Height="10" />
            <RowDefinition Height="10" />
            <RowDefinition Height="2*" /> <!-- this row will be twice as tall as the one below -->
            <RowDefinition Height="*" />
</Grid.RowDefinitions>

여기서 3 열은 높이가 54 Dius (높이가 약 26 Dius의 4 번째 행보다 2 배), 두 높이 합계 80은 그리드의 나머지 공간 (10 + 10 +입니다. 26 + 54 = 100, 그리드 높이).

BTW, 나는 Charlie의 대답에 동의합니다.

항목을 a에 넣을 수 있습니다 유니폼 그리드 columns = "1"으로 eMptry 텍스트를 얻을 때 텍스트 상자가 붕괴 될 수 있도록 가시성을 가시합니다.

 <UniformGrid Columns="1">
    <TextBlock Text="AAAA" Visibility="Collapsed" Grid.Row="0"/>
    <TextBlock Text="BBBBB" Grid.Row="1"/>
    <TextBlock Text="CCCCC" Grid.Row="2"/>
    <TextBlock Text="DDDDD" Grid.Row="3"/>
    <TextBlock Text="EEEE" Grid.Row="4"/>
</UniformGrid>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top