Silverlight에서 LayoutRoot를 Canvas가 아닌 Grid로 설정을 하고 Column이나 Row를 설정을 할 때가 있는데..

여기서 *과 Auto로 설정하는 차이가 있습니다.

어제 프로그래밍을 하던 결과로는 다르더군요..

정확히 왜 다른지는 모르겠습니다. 하지만 이 2개가 같다고 생각하시면 안될것은 확실합니다.

우선

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

이런식으로 설정을 하였을 경우 0번째 Row에 Height속성값이 변하는 StoryBoard를 만들경우 생각하는 거하고는 다른 모습으로 StoryBoard가 작동을 할 것입니다. 또한 0번째 Row의 Height가 줄어들고 그 줄어든 공간을 1번째 Row에서 차지를 해야하는데 그렇게 나오지를 않습니다.

그다음에 1번째는 *로 설정을 한 이유는 Blaclight라는 라이브러리에서 DragDropPanel이라는 것을 사용을 하는데 이곳에서는 Auto로 값을 주면은 제대로 된 모습이 안나옵니다.

왜이렇게 *과 Auto로 설정을 주는것에 차이가 있는지는 아직은 모르지만, 어제 엄청난 삽질로 알아낸 사실은 분명히 다르다는 겁니다.



훈스닷넷(http://www.hoons.kr)에 문의 결과
 XAML에서 auto 속성은 C#코드로 구현할 경우 Double.NaN 필드를 사용하더군요.
* 은 측정된 전체크기에서 나머지부분을 할당하기때문에 그런 결과가 나오는 게 아닐까요??
두가지 예제코드 ^^
<Grid ShowGridLines="True" Height="400" Width="400">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="Black" BorderThickness="2" />
<Border Grid.Row="1" BorderBrush="Black" BorderThickness="2" />
</Grid>


<Grid ShowGridLines="True" Height="400" Width="400">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="Black" BorderThickness="2" />
<Border Grid.Row="1" BorderBrush="Black" BorderThickness="2" />
</Grid>

이렇게 결론이 나왔습니다.
저작자 표시 비영리 변경 금지