WPF .NET4.0 Listbox和ItemsControl

时间:2011-05-17 17:52:51

标签: wpf .net-4.0

我试图用项目填充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文章。

谢谢,

2 个答案:

答案 0 :(得分:1)

ItemsControlListBox不同 - 它不包含选择功能。

您最好的选择是使用实际的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>