WPF Template에 Grid 사용하기( UniformGrid, Grid, WrapPanel)
상식적으로
WrapPanel에 Orientation을 수평으로 하고 객체를 추가하면 차례대로 wrap되면서 객체가 추가되어야 한다. Grid는 Row나 Column 을 define 해놓지 않으면 Grid크기로 strech되기 때문에 RowDefinition등을 사용해서 matrix를 만든다.
그럼... WrapPanel에 템플릿을 사용해 버튼을 그리면? 당연히 차례대로 들어갈거라 생각했는데 첫번째줄, 두번째줄.... 하나씩 들어간다. 이건뭐... StackPanel 도 아니고.. 아직 WPF에 대한 이해가 부족한 것 같다.(책을 읽다가 말아서 이 고생을 하는것 같다.)
MSDN을 보면 ItemsPanel을 사용해서 내가 구현하고자 하는걸 비슷하게 해놓았더라.
덕분에 ItemsPanel이란 검색어를 획득(?)해서 구글링 해보았더니 딱 원하는게 나왔다.
WrapPanel에 Orientation을 수평으로 하고 객체를 추가하면 차례대로 wrap되면서 객체가 추가되어야 한다. Grid는 Row나 Column 을 define 해놓지 않으면 Grid크기로 strech되기 때문에 RowDefinition등을 사용해서 matrix를 만든다.
그럼... WrapPanel에 템플릿을 사용해 버튼을 그리면? 당연히 차례대로 들어갈거라 생각했는데 첫번째줄, 두번째줄.... 하나씩 들어간다. 이건뭐... StackPanel 도 아니고.. 아직 WPF에 대한 이해가 부족한 것 같다.(책을 읽다가 말아서 이 고생을 하는것 같다.)
MSDN을 보면 ItemsPanel을 사용해서 내가 구현하고자 하는걸 비슷하게 해놓았더라.
덕분에 ItemsPanel이란 검색어를 획득(?)해서 구글링 해보았더니 딱 원하는게 나왔다.
<ItemsControl ItemsSource="{Binding Path=PositionList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="12" Columns="4" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate >
<TextBlock Text="{Binding State}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
public class PositionInfo
{
public int Row
{ get ; set ; }
public int Column
{
get ;
set ;
}
public string State
{
get ;
set ;
}
}
바로 밑에 명쾌한 답변이 있었다.<ItemsControl>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row" Value="{Binding Row}"/>
<Setter Property="Grid.Column" Value="{Binding Column}"/>
</Style>
</ItemsControl.ItemContainerStyle>
...</ItemsControl>
안된다.... ㅠ 삽질하다가 결굴 Grid 를 써서 아래처럼 했다. <ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
결론은 원하는 칸에 객체를 넣을려면 UniformGrid 대신 Grid를 써야한다.
댓글
댓글 쓰기