我有一个已分配给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控件的默认行为吗?
非常感谢
答案 0 :(得分:4)
是的,这是默认行为。
在对齐的情况下,看起来每个WrapPanel
中都有一个ListBoxItem
,它没有足够的空间将另一个项目放在第1行。剩余的空间未被使用,因为HorizontalContentAlignment
上的ListBox
设置默认为左侧。此设置又由默认ListBoxItem
绑定。在HorizontalContentAlignment="Stretch"
上设置ListBox
应该可以解决问题。
外边框来自BorderBrush
和BorderThickness
的默认设置。设置BorderThickness="0"
将完全摆脱它。
还有一些其他默认Padding
设置可在默认样式和模板中添加一些间距。如果您想了解更多内容,请在Blend中为项目添加ListBox
并制作其默认Template
和ItemContainerStyle
的副本,然后查看XAML。如果您不需要选择行为,也请考虑使用基础ItemsControl
,因为它没有任何这些类型的默认设置。