ItemsControl与SharedSizeGroup和拉伸

时间:2014-01-06 21:52:21

标签: wpf xaml itemscontrol itemtemplate sharedsizegroup

显然,在使用SharedSizeGroup时,不能使用星号(*)。这已经在这里讨论过: Grid's SharedSizeGroup and * sizing

不幸的是,在那次讨论中,他们并没有真正为这个问题提供可行的解决方案。

我想显示一个控件列表,每行一个控件,具有以下布局:

(姓名)(输入文本框)(X按钮)

它应该是这样的:

Description [                     ] X
Name        [                     ] X
ID          [                     ] X

但相反,我正在

Description [] X
Name        [] X
ID          [] X

第1列应该与最长的单词一样宽。第2列(条目文本框)应该拉伸以填充所有剩余空间(*),但这不能像前面讨论的那样使用SharedSizeGroup。 *被视为自动,因此不拉伸。

有什么想法吗?这是XAML:

        <ItemsControl ItemsSource="{Binding FilterList}" Margin="5,0,5,0" Grid.IsSharedSizeScope="True">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="5,0,5,0" HorizontalAlignment="Left">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition SharedSizeGroup="Column0" Width="Auto"/>
                            <ColumnDefinition SharedSizeGroup="Column1" Width="*"/>
                            <ColumnDefinition SharedSizeGroup="Column2" Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <Label Grid.Column="0" Content="{Binding FilterLabel}" HorizontalAlignment="Right"/>
                        <TextBox Grid.Column="1" Height="20" Text="{Binding FilterString, UpdateSourceTrigger=PropertyChanged}"/>
                        <Button Grid.Column="2" Content=" X " Margin="2" Visibility="{Binding ClearFilterVis}" Command="{Binding ClearFilterCommand}"/>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

1 个答案:

答案 0 :(得分:1)

那是因为你将Grid's HorizontalAlignment设置为Left而不是Stretch。或者只是删除Grid's HorizontalAlignment设置。正如@Highcore所说,在这种情况下你似乎不需要SharedSizeGroup