C# ListBox未使用Grid.Column-WPF中的所有可用空间
我有一个ListBox控件,该控件已分配给Grid.Column 0,它的宽度定义了一个值“*”,但是在渲染时有相当大的空间未被使用 我还注意到ListBox控件本身周围有一个排序边界,但是我没有在标记中添加一个 我的UI关注区域标记为红色: 我的标记:C# ListBox未使用Grid.Column-WPF中的所有可用空间,c#,wpf,.net-4.0,listbox,grid-layout,C#,Wpf,.net 4.0,Listbox,Grid Layout,我有一个ListBox控件,该控件已分配给Grid.Column 0,它的宽度定义了一个值“*”,但是在渲染时有相当大的空间未被使用 我还注意到ListBox控件本身周围有一个排序边界,但是我没有在标记中添加一个 我的UI关注区域标记为红色: 我的标记: <Window.Resources> <DataTemplate x:Key="GameImagesTemplate" > <StackPanel Orientation="
<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控件的默认行为吗
非常感谢是的,这是默认行为 在对齐的情况下,看起来每个ListBoxItem中都有一个WrapPanel,它没有足够的空间将另一个项目放在第1行。剩余空间未使用,因为ListBox上的HorizontalContentAlignment设置默认为左侧。默认的ListBoxItem又将此设置绑定到。在列表框上设置HorizontalContentAlignment=Stretch应该可以解决这个问题 外部边框来自BorderBrush和BorderThickness的默认设置。将BorderThickness设置为0将完全消除它
还有一些其他默认填充设置可以在默认样式和模板中添加一些间距。如果您想深入了解这些内容,请在Blend中将列表框添加到项目中,并复制其默认模板和ItemContainerStyle,然后签出XAML。在不需要选择行为的情况下,也可以考虑使用基本ItMs控件,因为它没有任何类型的默认设置。 < P>是的,这是默认行为。 在对齐的情况下,看起来每个ListBoxItem中都有一个WrapPanel,它没有足够的空间将另一个项目放在第1行。剩余空间未使用,因为ListBox上的HorizontalContentAlignment设置默认为左侧。默认的ListBoxItem又将此设置绑定到。在列表框上设置HorizontalContentAlignment=Stretch应该可以解决这个问题 外部边框来自BorderBrush和BorderThickness的默认设置。将BorderThickness设置为0将完全消除它
还有一些其他默认填充设置可以在默认样式和模板中添加一些间距。如果您想深入了解这些内容,请在Blend中将列表框添加到项目中,并复制其默认模板和ItemContainerStyle,然后签出XAML。也可以考虑在不需要选择行为的情况下使用基本ItMs控件,因为它没有任何类型的默认设置。谢谢约翰,你的建议奏效了。我以前的实现使用了ItemsControl,但我认为选择功能是我非常想要的特性。这可能是一个有点宽泛的问题,但是扩展/自定义默认控件样式/模板是否被鼓励用于WPF?是的,但有时这有些过分。如果你不用做就可以进行所需的更改,那么你仍然可以在不同的操作系统上获得本机样式的好处。谢谢John,你的建议成功了。我以前的实现使用了ItemsControl,但我认为选择功能是我非常想要的特性。这可能是一个有点宽泛的问题,但是扩展/自定义默认控件样式/模板是否被鼓励用于WPF?是的,但有时这有些过分。如果您可以在不做更改的情况下进行所需的更改,那么您仍然可以从不同操作系统上的本机样式中获益。