WPF布局问题

时间:2009-07-10 00:17:39

标签: wpf layout

我遇到了如何整理数据的屏幕布局的问题。

我有一个具有属性A1和A2的对象A,可能包含一个对象B.

对象B具有属性B1,B2,B3以及对象C中的一个或多个的集合。

对象C包含属性C1,C2和C3

我希望布局为

A1   A2

A1   A2  B1   B2   B3  C1   C2   C3

A1   A2  B1   B2   B3  C1   C2   C3

                       C1   C2   C3

我尝试了以下Xaml,但无法让对象C多次出现。我创建了一个datatemplate

                                                                                                             

            <TextBlock  Text="{Binding Path=A1}" Grid.Column="0" />
    <TextBlock  Text="{Binding Path=A2}" Grid.Column="1" />
            <StackPanel Orientation="Horizontal" Name="B" DataContext="{Binding Path=B}" Grid.Column="2">
        <TextBlock  Text="{Binding Path=B1}"  />
        <TextBlock  Text="{Binding Path=B2}"  />
        <TextBlock  Text="{Binding Path=B3}"  />
        <StackPanel Orientation="Horizontal" Name="C" DataContext="{Binding Path=C}">
            <TextBlock  Text="{Binding Path=C1}"  />
            <TextBlock  Text="{Binding Path=C2}"  />
            <TextBlock  Text="{Binding Path=C3}"  />
        </StackPanel>
    </StackPanel>
        </Grid>

并使用datatemplate使用listview显示数据,但只显示一行C数据。有关如何获得所需布局的任何建议吗?

约翰

1 个答案:

答案 0 :(得分:0)

据推测(如果由于问题的清晰度不够而我必须做出的所有假设都是正确的),你想要这样:

<TextBlock  Text="{Binding Path=A1}" Grid.Column="0" />
    <TextBlock  Text="{Binding Path=A2}" Grid.Column="1" />
        <StackPanel Orientation="Horizontal" Name="B" DataContext="{Binding Path=B}" Grid.Column="2">
            <TextBlock  Text="{Binding Path=B1}"  />
            <TextBlock  Text="{Binding Path=B2}"  />
            <TextBlock  Text="{Binding Path=B3}"  />
            <ItemsControl ItemsSource="{Binding Path=C}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Vertical" />
                    </ItemsPanelTemplate>
                 </ItemsControl.ItemsPanel>
                 <ItemsControl.ItemTemplate>
                     <DataTemplate>
                         <StackPanel Orientation="Horizontal" Name="C">
                             <TextBlock  Text="{Binding Path=C1}"  />
                             <TextBlock  Text="{Binding Path=C2}"  />
                             <TextBlock  Text="{Binding Path=C3}"  />
                         </StackPanel>
                     </DataTemplate>
                 </ItemsControl.ItemTemplate>
            </ItemsControl>
    </StackPanel>