简体   繁体   English

模板选择器中的Windows Phone网格拉伸宽度

[英]Windows phone Grid Stretch Width in Template selector

Hi Everyone this is my first question so, I'll try to be really explicit: I have a ListBox with a Style and Template to make it a two column style view. 嗨,大家好,这是我的第一个问题,所以,我会尽量明确:我有一个带样式和模板的ListBox,使其成为两列样式视图。

This is the Template for the ListBoxItem : 这是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>

And this is the ListBox: 这是ListBox:

<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>

This is the Result: 结果如下:

在此处输入图片说明

At this point, everything is fine, so I implemented a TemplateSelector to change the template of the ListBoxItem depending of SelectedItem of a ListBox. 此时,一切都很好,因此我实现了TemplateSelector来根据ListBox的SelectedItem更改ListBoxItem的模板。 So I put the same template into a TemplateSelector but the Grid's Width is not Stretching. 因此,我将相同的模板放入TemplateSelector中,但网格的宽度未拉伸。

Template Selector: 模板选择器:

<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>

This is the Updated ListBox: 这是更新的列表框:

<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>

The Final Result: 最终结果:

在此处输入图片说明

The Grid is not stretching, If anyone can please help me I'll apreciate. 网格没有伸展,如果有人可以帮助我,我将不胜感激。

The Template Selector has its own Width, so is important to stretch the Selector to allow the Grids to expand its size: 模板选择器具有自己的宽度,因此拉伸选择器以允许网格扩展其大小很重要:

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

Note the principal change: 注意主要变化:

HorizontalContentAlignment="Stretch"

Regards 问候

I got problems with setting Listbox TemplateSelector to span 100%. 我将Listbox TemplateSelector设置为100%时遇到问题。 My solution to this, was to replace Listbox with LongListSelector. 我对此的解决方案是用LongListSelector替换Listbox。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM