【问题标题】:ItemsControl layout with nested list - each wrapper under self带有嵌套列表的 ItemsControl 布局 - self 下的每个包装器
【发布时间】:2018-11-29 02:41:51
【问题描述】:

我的目标是将第 3 个包装器放在第 2 个包装器下面。对于这个布局,我混合使用了停靠面板 + 堆栈面板。

  • 第一个包装器是标签的堆栈面板
  • 第二个包装器是以停靠面板为模板的项目控件(成员列表)
  • 第三个包装器是以停靠面板为模板的项目控件(每个成员地址的嵌套列表)

查看

<Grid>
        <ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible">
            <DockPanel>
                <StackPanel DockPanel.Dock="Top"  Orientation="Horizontal">
                    <Label Style="{StaticResource MinWidthLeft}" Content="Typ Adresu"/>
                    <Label Style="{StaticResource MinWidthLeft}" Content="Imie"/>
                    <Label Style="{StaticResource MinWidthLeft}" Content="Nazwisko"/>
                    <Label Style="{StaticResource MinWidthLeft}" Content="Nazwa Firmy"/>
                    <Label Style="{StaticResource MinWidthLeft}" Content="NIP"/>
                    <Label Style="{StaticResource MinWidthLeft}" Content="REGON"/>
                    <Label Style="{StaticResource MinWidthLeft}" Content="Ulica"/>
                    <Label Style="{StaticResource MinWidthLeft}" Content="Adres"/>
                    <Label Style="{StaticResource MinWidthLeft}" Content="Kod pocztowy"/>
                    <Label Style="{StaticResource MinWidthLeft}" Content="Miasto"/>
                    <Label Style="{StaticResource MinWidthLeft}" Content="Kraj"/>
                    <Label Style="{StaticResource MinWidthLeft}" Content="Dodatkowe informacje"/>
                </StackPanel>

                <ItemsControl ItemsSource = "{Binding listContractorAddAddress}" >
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
                                <Button Style="{StaticResource MinWidth}" Content="Dodaj Adres" Command="{Binding Path=AddAddress}"/>
                                <TextBlock Style="{StaticResource MinWidth}" Text="{Binding Member.Login}"/>
                                <TextBlock Style="{StaticResource MinWidth}" Text="{Binding Member.Email}"/>

                                <ItemsControl ItemsSource = "{Binding Addresses}" >
                                    <ItemsControl.ItemTemplate>
                                        <DataTemplate>
                                            <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
                                                <Button Style="{StaticResource MinWidth}" Content="Edytuj" Command="{Binding Path=EditAddress}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.TypAdresu}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Imie}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Nazwisko}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.NazwaFirmy}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.NIP}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.REGON}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Ulica}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Adres}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.KodPocztowy}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Miasto}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Kraj}"/>
                                                <TextBlock Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.DodatkoweInformacje}"/>
                                            </StackPanel>
                                        </DataTemplate>
                                    </ItemsControl.ItemTemplate>
                                    <ItemsControl.ItemsPanel>
                                        <ItemsPanelTemplate>
                                            <!--<DockPanel/>-->
                                            <StackPanel DockPanel.Dock="Top" Orientation="Vertical" />
                                        </ItemsPanelTemplate>
                                    </ItemsControl.ItemsPanel>
                                </ItemsControl>
                            </StackPanel>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <!--<DockPanel/>-->
                            <StackPanel DockPanel.Dock="Top"  Orientation="Vertical" />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                </ItemsControl>
            </DockPanel>
        </ScrollViewer>
    </Grid>

我花了很多时间,我尝试使用:

  • 只有水平/垂直方向的堆栈面板(我做了 与使用停靠面板的布局相同)。
  • 只有网格,但这对我有用 - 灾难和浪费时间 (我很难说我做错了什么,每一行都是 右侧而不是另一侧下方)

谢谢!

【问题讨论】:

  • 不知道你想达到什么目的

标签: wpf stackpanel dockpanel


【解决方案1】:

我不得不重建一切并重新考虑网格模式:

<Grid IsSharedSizeScope="True">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition SharedSizeGroup="A" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal">
        <Label Style="{StaticResource MinWidthLeft}" Content="Typ Adresu"/>
        <Label Style="{StaticResource MinWidthLeft}" Content="Imie"/>
        <Label Style="{StaticResource MinWidthLeft}" Content="Nazwisko"/>
        <Label Style="{StaticResource MinWidthLeft}" Content="Nazwa Firmy"/>
        <Label Style="{StaticResource MinWidthLeft}" Content="NIP"/>
        <Label Style="{StaticResource MinWidthLeft}" Content="REGON"/>
        <Label Style="{StaticResource MinWidthLeft}" Content="Ulica"/>
        <Label Style="{StaticResource MinWidthLeft}" Content="Adres"/>
        <Label Style="{StaticResource MinWidthLeft}" Content="Kod pocztowy"/>
        <Label Style="{StaticResource MinWidthLeft}" Content="Miasto"/>
        <Label Style="{StaticResource MinWidthLeft}" Content="Kraj"/>
        <Label Style="{StaticResource MinWidthLeft}" Content="Dodatkowe informacje"/>
    </StackPanel>

    <ItemsControl Grid.Row="1" Grid.Column="0" ItemsSource="{Binding listContractorAddAddress}" >
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Vertical" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <StackPanel Grid.Row="0" Orientation="Horizontal">
                        <Button Style="{StaticResource MinWidth}" Content="Dodaj Adres" Command="{Binding Path=AddAddress}"/>
                        <TextBlock Style="{StaticResource MinWidth}" Text="{Binding Member.Login}"/>
                        <TextBlock Style="{StaticResource MinWidth}" Text="{Binding Member.Email}"/>
                    </StackPanel>
                    <StackPanel Grid.Row="1" Orientation="Horizontal">
                        <ItemsControl ItemsSource="{Binding Addresses}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel Orientation="Vertical" />
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="*" />
                                        </Grid.ColumnDefinitions>
                                        <Button Grid.Column="0" Style="{StaticResource MinWidth}" Content="Edytuj" Command="{Binding Path=EditAddress}"/>
                                        <TextBlock Grid.Column="1" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.TypAdresu}"/>
                                        <TextBlock Grid.Column="2" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Imie}"/>
                                        <TextBlock Grid.Column="3" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Nazwisko}"/>
                                        <TextBlock Grid.Column="4" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.NazwaFirmy}"/>
                                        <TextBlock Grid.Column="5" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.NIP}"/>
                                        <TextBlock Grid.Column="6" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.REGON}"/>
                                        <TextBlock Grid.Column="7" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Ulica}"/>
                                        <TextBlock Grid.Column="8" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Adres}"/>
                                        <TextBlock Grid.Column="9" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.KodPocztowy}"/>
                                        <TextBlock Grid.Column="10" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Miasto}"/>
                                        <TextBlock Grid.Column="11" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.Kraj}"/>
                                        <TextBlock Grid.Column="12" Style="{StaticResource MinWidthLeft}" Text="{Binding MemberAddress.DodatkoweInformacje}"/>
                                    </Grid>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </StackPanel>
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>

对我来说,Html + css 比 xaml 更直观。 Uff 那是疯狂的 5 小时 :) Foggy Finder 感谢您的关注。

this is a template that helped me solve the problem

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 2018-05-28
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多