我试图用项目填充ListBox。 ItemsSource
如下:
public SortedDictionary<string, List<int>> AvailableValues
当我有以下内容时,这些项目似乎很好地布局了。除了我不能选择整个项目并执行一些功能。
<ScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" >
<ItemsControl ItemsSource="{Binding AvailableValues}">
<ItemsControl.Template>
<ControlTemplate>
<CustomControls:UniformWrapPanel IsItemsHost="True"/>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="60"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="{Binding Key}" />
<ComboBox Grid.Row="0" Grid.Column="1" ItemsSource="{Binding Value}" SelectedItem="{Binding SelectedInputValue, UpdateSourceTrigger=PropertyChanged}" IsSynchronizedWithCurrentItem="True" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
我已尝试将ItemsControl
替换为ListBox
(以及ListBox.ItemTemplate
),似乎无法显示Label
Content
左对齐的位置并且Combobox
内容是右对齐的。
UniformWrapPanel
来自CodeProject文章。
谢谢,
答案 0 :(得分:1)
ItemsControl
与ListBox
不同 - 它不包含选择功能。
您最好的选择是使用实际的ListBox并修改ItemTemplate以显示您想要的内容。
<ListBox x:Name="MyListBox" ItemsSource="{Binding AvailableValues}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="60"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="{Binding Key}" />
<ComboBox Grid.Row="0" Grid.Column="1" ItemsSource="{Binding Value}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 1 :(得分:1)
如果对齐是主要问题,您可能需要尝试将标签和组合框包装到网格中。将水平对齐设置为网格拉伸,并将水平对齐设置为左对齐。
设置最小最大尺寸是可选的,但可能很有用
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="55" />
<ColumnDefinition Width="0.636*" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" HorizontalALignment="Left"/>
<ComboBox Grid.Column="1" HorizontalAlignment="Left"/>
</Grid>