2016-09-21 4 views
0

저는 상대 WPF 초보자이며 기본 사항에 대해 계속 저의 머리를 쓰려고합니다. 난 그냥 난처한 날 (그리고 그것은 혼자 그리드에만 국한되지 않는 것 같습니다) 그리드 크기 조정 문제를 가로 질러 왔어요.눈금 행 자동 크기 관련 크기 조정

문제는 상대적으로 크기가 큰 행/열, 다른 행의 열/열, 그 행/열 크기가 자동으로 설정되어있는 경우, 자식 눈금의 상대 크기 조정에있는 것으로 보입니다. 효과 없음. 나는이 XAML에 대한 기대 무엇

enter image description here

은 내부 그리드 컬럼들이 부모의 자동 크기의 컬럼 내부에있는 경우에도 (하나는 배 다른의 폭 인 상태) 여전히 상대적으로 크기 때문이다 그리드. 이 예상되는 동작입니까,이 버그입니까 아니면 기본 뭔가 빠져 있습니까?

감사합니다.

+1

텍스트로 코드를 삽입하십시오 없습니다 (스크린 샷 참조) 편집자 – ASh

+1

예, 이것이 기본 동작입니다. '자동'은 단지 필요한 최소값을 의미합니다. 그리고 외부 'Grid'에 설정되어 있으므로 우선 순위를가집니다. – AnjumSKhan

+0

3 열이있는 첫 번째 격자 만 가지고 내부 격자를 제거하지 않는 이유는 무엇입니까? – adminSoftDK

답변

1

내부 격자가 있어야하는 외부 격자 열이 지시하는 것처럼 보입니다. 내부 그리드 폭에 열 너비를 결합함으로써 역 측정 순서를보십시오 : 크기 조절 만 1 열이 증가하고있다 <ColumnDefinition Width="{Binding Path=ActualWidth, ElementName=InnerGrid}"/>

<Grid Background="DarkBlue"> 
    <Grid.Resources> 
     <Style TargetType="Label"> 
      <Setter Property="Foreground" Value="White"/> 
      <Setter Property="BorderBrush" Value="White"/> 
      <Setter Property="BorderThickness" Value="1"/> 
     </Style> 
    </Grid.Resources> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*" /> 
     <ColumnDefinition Width="{Binding Path=ActualWidth, ElementName=InnerGrid}"/>    
    </Grid.ColumnDefinitions> 

    <Label Content="Cell 1" /> 

    <Grid Grid.Column="1" Name="InnerGrid" Background="DarkRed"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="10*" /> 
      <ColumnDefinition Width="3*" /> 
     </Grid.ColumnDefinitions> 
     <Label Content="Cell 2.1" /> 
     <Label Grid.Column="1" Content="Cell 2.2" /> 
    </Grid> 
</Grid> 

후 스크린 샷으로,

enter image description here

+0

오우 와우 감사합니다! 그게 정확히 내가하려고했던거야! : D 나만인가, 아니면 WPF가 자동 크기 조정을 처리하는 방식이 조금 이상해 보입니까? CSS에서 오는 것은 이러한 기본적인 기능을 위해 매우 복잡해 보입니다. – Ross

2

이 시도 :

<Grid Background="DarkBlue"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="2*" /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <Label BorderBrush="White" 
       BorderThickness="1" 
       Content="Cell 1" 
       Foreground="White" /> 
     <Grid Grid.Column="1"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="10*" /> 
       <ColumnDefinition Width="3*" /> 
      </Grid.ColumnDefinitions> 
      <Label BorderBrush="White" 
        BorderThickness="1" 
        Content="Cell 2" 
        Foreground="White" /> 

      <Label Grid.Column="1" 
        BorderBrush="White" 
        BorderThickness="1" 
        Content="Cell 3" 
        Foreground="White" /> 
     </Grid> 
    </Grid> 

첫 번째 그리드의 열이 자동으로 설정되어 있기 때문에 두 번째 그리드 이상하게 행동 한 것은하는 이유. 자동으로 가능한 한 작게되도록 내부의 모든 것을 스쿼시하려고합니다. 레이블이 없으면 두 번째 눈금의 각 열에 대해 너비가 0이됩니다. 라벨의 너비를 더하면 거의 동일합니다.

WPF가 자동 열/행에서 무언가의 너비를 계산하는 순서와 관련이 있다고 생각합니다.

첫 번째 작업은 두 번째 눈금의 자동 값을 0으로 인식하는 것입니다. 그 다음에는 내용의 너비가이 계산 된 값에 어떤 것이 든 추가됩니다. 두 레이블이 거의 같은 크기이므로, 이로 인해 두 개의 유사한 열이 생깁니다.

제 해결책은 자동 값을 제거하고 대신 첫 번째 격자의 첫 번째 열에 "전체 너비의 2/3를 얻고 다른 열은 1/3을 얻습니다"라고 말합니다. 자동이 아니며, 두 번째 열은 어떤 식 으로든 부숴지지 않습니다.

+0

고마워요! 그것이 내가 질문을 게시하기 전에 우리가 끝내었던 것이다. 나는 자동의 나의 해석이 아주 달랐다고 생각한다. 나는 자동차가 컨테이너 크기를 아이에게 맞게 변경했다고 생각했지만, 현실에서는 아이 사이징과 스쿼시를 무시한 채로 보였다. – Ross

+0

@ 로스 정확. StackPanels는 매우 유사한 방식으로 작동합니다. – Logan