0

大家好,这是我的第一个问题,所以我会尽量明确:我有一个带有样式和模板的列表框,使其成为两列样式视图。

这是 ListBoxItem 的模板

<DataTemplate x:Key="ItemDataTemplate">
        <Grid Height="29">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width=".3*" />
                <ColumnDefinition Width=".7*" />
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Name="txtBind1" Text="{Binding Codigo}"/>
            <TextBlock Grid.Column="1" Name="txtBind2" Text="{Binding Descripcion}"/>
        </Grid>            
    </DataTemplate>

<Style TargetType="ListBoxItem" x:Key="ListboxStretchStyle">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="ListBoxStyle" TargetType="ListBox">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <ScrollViewer>
                        <StackPanel VerticalAlignment="Top">
                            <Grid Height="30" Background="Gray">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="0.30*"/>
                                    <ColumnDefinition Width="0.70*" />
                                </Grid.ColumnDefinitions>
                                <Border BorderBrush="{StaticResource PhoneBackgroundBrush}" BorderThickness="1">
                                    <TextBlock Grid.Column="0" Text="{Binding CriterioActual.Descripcion}"/>
                                </Border>
                                <Border Grid.Column="1" BorderBrush="{StaticResource PhoneBackgroundBrush}" BorderThickness="1">
                                    <TextBlock Grid.Column="1" Text="Descripción"/>
                                </Border>
                            </Grid>
                            <ItemsPresenter/>
                        </StackPanel>
                    </ScrollViewer>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

这是列表框:

<ListBox Height="320" Margin="0,84,0,0" Name="ListaArticulos" VerticalAlignment="Top"
                Style="{StaticResource ListBoxStyle}"
                ItemTemplate="{StaticResource ItemDataTemplate}"
                ItemContainerStyle="{StaticResource ListboxStretchStyle}"
                ItemsSource="{Binding Articulos}">
            </ListBox>

这是结果:

在此处输入图像描述

至此,一切都很好,所以我实现了一个 TemplateSelector 来根据 ListBox 的 SelectedItem 更改 ListBoxItem 的模板。所以我将相同的模板放入 TemplateSelector 但网格的宽度没有拉伸。

模板选择器:

<DataTemplate x:Key="MultiTemplate">
        <Views:ArticulosTemplateSelector Content="{Binding}" Filtro="{Binding ElementName=ComboCriterios, Path=SelectedItem, Mode=OneWay}">
            <Views:ArticulosTemplateSelector.FiltroCodigo>
                <DataTemplate>
                    <Grid Height="29" Background="Gray" HorizontalAlignment="Stretch">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width=".3*" />
                            <ColumnDefinition Width=".7*" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Grid.Column="0" Name="txtBind1" HorizontalAlignment="Stretch" Text="{Binding Codigo}"/>
                        <TextBlock Grid.Column="1" Name="txtBind2" HorizontalAlignment="Stretch" Text="{Binding Descripcion}"/>
                    </Grid>
                </DataTemplate>
            </Views:ArticulosTemplateSelector.FiltroCodigo>
</DataTemplate>

这是更新的列表框:

<ListBox Height="320" Margin="0,84,0,0" Name="ListaArticulos" VerticalAlignment="Top"
                Style="{StaticResource ListBoxStyle}"
                ItemTemplate="{StaticResource MultiTemplate}"
                ItemContainerStyle="{StaticResource ListboxStretchStyle}"
                ItemsSource="{Binding Articulos}">
            </ListBox>

最终结果:

在此处输入图像描述

网格没有拉伸,如果有人可以请帮助我,我会很感激。

4

2 回答 2

1

模板选择器有自己的宽度,因此拉伸选择器以允许网格扩展其大小很重要:

<Views:ArticulosTemplateSelector HorizontalContentAlignment="Stretch" Content="{Binding}" Filtro="{Binding ElementName=ComboCriterios, Path=SelectedItem, Mode=OneWay}">

注意主要变化:

HorizontalContentAlignment="Stretch"

问候

于 2013-04-02T16:08:01.900 回答
0

我在将 Listbox TemplateSelector 设置为 100% 时遇到问题。我对此的解决方案是用 LongListSelector 替换 Listbox。

于 2014-01-07T13:05:17.020 回答