#wpf #.net-4.0
#wpf #.net-4.0
Вопрос:
Я пытаюсь заполнить список элементами. 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.
Спасибо,
Ответ №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>
Комментарии:
1. Спасибо @randyc. Странно, что он теряет график даже с приведенным выше определением, но с двумя элементами, содержащимися в a, для
StackPanel
которыхOriention
установлено значениеHorizontal
. Однако приведенное выше определение сделало свое дело!
Ответ №2:
ItemsControl
Это не то же самое, что a 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. Приветствую @Rachel. Я потратил довольно много времени даже на
Canvas
настройку подItemsPanel
. В конце концов, предложение @ randyc сделало свое дело.