2

我有一个已分配给 Grid.Column 0 的 ListBox 控件,该控件的宽度定义为“*”,但是在渲染时有相当大的空间未使用。

我还注意到 ListBox 控件本身周围有各种各样的边框,但是我没有在标记中添加一个。

我的用户界面(以红色标记的关注领域):

在此处输入图像描述

我的标记:

<Window.Resources>
        <DataTemplate x:Key="GameImagesTemplate" >
            <StackPanel Orientation="Vertical">
                <Image Source="{Binding FileInfo.FullName}" Margin="8,8,8,8" Height="70" Width="70" />
                <Label Content="{Binding Name}" Width="70" />
            </StackPanel>
        </DataTemplate>

        <DataTemplate x:Key="GameTemplate">
            <StackPanel>
                <Label Content="{Binding Name}" Background="Gray" FontSize="16" />
                <ListBox x:Name="imageContent" ItemsSource="{Binding FileList}" ItemTemplate="{StaticResource GameImagesTemplate}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" >
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <WrapPanel Orientation="Horizontal" IsItemsHost="True" />
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                </ListBox>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <ListBox x:Name="ContentList" ItemTemplate="{StaticResource GameTemplate}" Grid.Column="0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" />

        <StackPanel Grid.Column="1" Background="DarkGray">
            <Button Click="OnLoad">_Load</Button>
            <Button Click="OnSave">_Save</Button>
            <Button Click="OnAdd">_Add</Button>
            <Button Click="OnDelete">_Delete</Button>
        </StackPanel>
    </Grid>

我将如何解决提出的两个问题。它是 ListBox 控件的默认行为吗?

非常感谢

4

1 回答 1

4

是的,这是默认行为。

在对齐的情况下,看起来你WrapPanel每个都有一个,ListBoxItem它没有足够的空间将另一个项目放在第 1 行。由于默认HorizontalContentAlignment设置为左,剩余空间未使用。ListBox默认情况下,此设置又绑定到ListBoxItem. 设置HorizontalContentAlignment="Stretch"ListBox应该解决这个问题。

外边框来自 和 的默认BorderBrush设置BorderThickness。设置BorderThickness="0"将完全摆脱它。

还有一些其他默认Padding设置会在默认样式和模板中添加一些间距。如果您想了解更多内容ListBox,请在 Blend 中添加一个项目并复制其默认值TemplateItemContainerStyle查看 XAML。ItemsControl在不需要选择行为的情况下也可以考虑使用基础,因为它没有任何这些类型的默认设置。

于 2013-02-11T21:53:11.077 回答