【问题标题】:Wpf Listbox bigger than the windowWpf Listbox 比窗口大
【发布时间】:2016-03-22 18:56:30
【问题描述】:

我正在学习 wpf/c#,并应用我学到的关于不同 wpf 布局的知识。我试图建立一个简单的员工列表/详细信息窗口,但我有小问题:

列表框高度大于窗口高度,而不是添加滚动条,其余元素不显示(某些元素显示一半)

这是一张图片:

这里是 xaml:

<Window x:Class="elexim.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:elexim"
        mc:Ignorable="d"
        Title="MainWindow">

    <StackPanel Orientation="Vertical">
        <Label HorizontalAlignment="Center">Employés </Label>
        <Separator Margin="20,0,0,0"/>

        <Grid Margin="0,20,0,0">

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

            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>

            <GroupBox Header="Liste Employés" Margin="20,0,0,0">

                <ListBox>
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <UniformGrid Columns="3"/>
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>

                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                    <local:employeeInfo/>
                </ListBox>
            </GroupBox>

            <GroupBox Header="Detail Employé" Margin="20,0,0,0" Grid.Column="1">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="auto"/>
                        <RowDefinition Height="auto"/>
                        <RowDefinition Height="auto"/>
                        <RowDefinition Height="auto"/>
                    </Grid.RowDefinitions>

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="auto"/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>

                    <Label Margin="10">Nom</Label>
                    <TextBox Grid.Column="1" VerticalAlignment="Center"/>

                    <Label Grid.Column="0" Grid.Row="1" Margin="10">Age</Label>
                    <TextBox Grid.Row="1" Grid.Column="1" VerticalAlignment="Center"/>

                    <Label Grid.Column="0" Grid.Row="2" Margin="10">Salaire</Label>
                    <TextBox Grid.Row="2" Grid.Column="1" VerticalAlignment="Center"/>

                    <StackPanel Orientation="Horizontal" Grid.Column="0" 
                                Grid.Row="3" Grid.ColumnSpan="2"
                                HorizontalAlignment="Right">
                        <Button Margin="10" MinWidth="100">Valider</Button>
                        <Button Margin="10" MinWidth="100">Annuler</Button>
                    </StackPanel> 

                </Grid>


            </GroupBox>
        </Grid>

    </StackPanel>

</Window>

如何让列表框添加滚动条而不是当前效果?

【问题讨论】:

  • 问题是主垂直StackPanel。它允许它尽可能多地垂直增长。将其替换为 GridDockPanel
  • @dkozl 没有办法使用 StackPanel 并将垂直增长限制为窗口大小?
  • 您可以限制StackPanel的大小,但只会影响可见部分。垂直的StackPanel 将永远给它的孩子无限的成长高度。类似地,同样的事情也会发生在宽度和水平StackPanel 上。这就是StackPanel 的工作原理
  • 好的,谢谢@dkozl

标签: c# wpf xaml listbox


【解决方案1】:

只需使用 GridStackPanel 代替:

让我举个例子:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Label HorizontalAlignment="Center">Employés </Label>
    <Separator Grid.Row="1" Margin="20,0,0,0"/>

    <Grid Grid.Row="2" Margin="0,20,0,0">

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

        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <GroupBox Header="Liste Employés" Margin="20,0,0,0">

            <ListBox>
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid Columns="3"/>
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>

                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
                <local:employeeInfo/>
            </ListBox>
        </GroupBox>

        <GroupBox Header="Detail Employé" Margin="20,0,0,0" Grid.Column="1">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="auto"/>
                </Grid.RowDefinitions>

                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>

                <Label Margin="10">Nom</Label>
                <TextBox Grid.Column="1" VerticalAlignment="Center"/>

                <Label Grid.Column="0" Grid.Row="1" Margin="10">Age</Label>
                <TextBox Grid.Row="1" Grid.Column="1" VerticalAlignment="Center"/>

                <Label Grid.Column="0" Grid.Row="2" Margin="10">Salaire</Label>
                <TextBox Grid.Row="2" Grid.Column="1" VerticalAlignment="Center"/>

                <StackPanel Orientation="Horizontal" Grid.Column="0" 
                            Grid.Row="3" Grid.ColumnSpan="2"
                            HorizontalAlignment="Right">
                    <Button Margin="10" MinWidth="100">Valider</Button>
                    <Button Margin="10" MinWidth="100">Annuler</Button>
                </StackPanel> 

            </Grid>


        </GroupBox>
    </Grid>

</Grid>

或者把你StackPanel放在ScrollViewer里面:

<ScrollViewer VerticalScrollBarVisibility="Auto">
  <StackPanel ... />
</ScrollViewer>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2011-07-14
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    相关资源
    最近更新 更多