Hola ¿es posible tener un control ListView -> ListView.Ver -> GridView -> GridViewColumn con «dos filas» por fila.


por ejemplo.


            la COLUMNA 1 Y la COLUMNA 2

FILA 1 bla          | datos
            bla

FILA 2, etc            | más

He intentado, sin éxito, el uso de una Celda de la plantilla, pero el elemento dentro de la plantilla de no cambiar el tamaño cuando su columna que contiene manualmente se cambia de tamaño.

Código:

        <ListView Height="238" DockPanel.Dock="Top" ItemsSource="{Binding Blah}" 
              SelectedItem="{Binding Path=Selectedblah, UpdateSourceTrigger=PropertyChanged}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="No." DisplayMemberBinding="{Binding Path=Id}" Width="25" />
                <GridViewColumn Header="Job Type" DisplayMemberBinding="{Binding Path=Something}" Width="165" />
                <GridViewColumn Header="Assigned To" DisplayMemberBinding="{Binding Path=SomethingElse}" Width="90" />
                <GridViewColumn Header="Created" DisplayMemberBinding="{Binding Path=DateCreated, Converter={StaticResource dateTimeFormat}, ConverterParameter='dd/MM/yy HH:mm'}" Width="65" />
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Image Source="/Streetcar.UI.Modules.FleetTracker;component/Resources/Images/tick.png" Visibility="{Binding IsCompleted, Converter={StaticResource boolToVis}}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

Alguna idea?

EDIT: Esto es usando MVVM así que no hay ningún código detrás de sólo una limitada ViewModel

InformationsquelleAutor brianstewey | 2009-09-30

5 Comentarios

  1. 4

    Bueno, voy a intentarlo de nuevo. ¿Has probado un CellTemplate con un TextBlock con TextWrapping conjunto para Wrap?

    Por Ejemplo:

    <ListView x:Name="MyListView">
       <ListView.View>
          <GridView>
             <GridViewColumn Header="Hello"
                             Width="50">
                <GridViewColumn.CellTemplate>
                   <DataTemplate>
                      <TextBlock Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce non nibh quis odio aliquet venenatis."
                                 TextWrapping="Wrap"/>
                   </DataTemplate>
                </GridViewColumn.CellTemplate>
             </GridViewColumn>
             <GridViewColumn Header="World"/>
          </GridView>
       </ListView.View>
    
       <ListViewItem/>
       <ListViewItem/>
       <ListViewItem/>
       <ListViewItem/>
    </ListView>
    • Hey ascalonx una combinación de su respuesta, y decasteljaus’ respuesta fue la solución. saludos.
  2. 3

    Primero, el CellTemplate es el camino a seguir para tener contenido personalizado dentro de una celda. Usted podría, por ejemplo, tienen una vertical StackPanel dentro de la CellTemplate.

    Siguiente, Para tener el contenido de la celda cambia de tamaño automáticamente al cambiar el ancho de columna, es necesario especificar HorizontalContentAlignment=»Estiramiento» en el ListViewItem:

    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListView.ItemContainerStyle>
    • Hey decasteljau una combinación de su respuesta, y ascalonx, fue la respuesta de la solución. saludos.
  3. 1

    Tener paciencia conmigo, ya que no estoy 100% seguro de que es lo que estás pidiendo. Pero, suponiendo que usted está queriendo tener cada fila tiene más texto debajo de ella (en la outlook característica de vista previa automática), creo que te puedo ayudar.

    Usted necesita para reemplazar el estilo predeterminado para ListViewItem y cambiar el ControlTemplate para agregar un TextBlock debajo de la GridViewRowPresenter. Cuando haya terminado, verá algo como esto:

    <Style TargetType="ListViewItem">
       <Setter Property="SnapsToDevicePixels" Value="true"/>
       <Setter Property="OverridesDefaultStyle" Value="true"/>
       <Setter Property="Template">
       <Setter.Value>
          <ControlTemplate TargetType="ListBoxItem">
             <Border Name="Border"
                     Padding="2"
                     SnapsToDevicePixels="true"
                     Background="Transparent">
                <StackPanel>
                   <GridViewRowPresenter Columns="{TemplateBinding GridView.ColumnCollection}"  
                                         VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                   <TextBlock Text="This is where your text goes!"/>
                </StackPanel>
             </Border>
    
             <ControlTemplate.Triggers>
                <Trigger Property="IsSelected" Value="true">
                   <Setter TargetName="Border"
                           Property="Background" Value="{StaticResource SelectedBackgroundBrush}"/>
                </Trigger>
                <Trigger Property="IsEnabled" Value="false">
                   <Setter Property="Foreground" 
                           Value="{StaticResource DisabledForegroundBrush}"/>
                </Trigger>
             </ControlTemplate.Triggers>
             </ControlTemplate>
       </Setter.Value>
       </Setter>
    </Style>

    Usted puede tener que conseguir de lujo con la unión de la Width de su TextBlock para que se envuelva en el ListView, pero esto debe empezar.

    • No creo que es lo que estoy buscando ascalonx. Parece que acaba de agregar una fila estática para cada fila. Estoy buscando a empujar mucho contenido en una segunda fila. sólo dentro de una columna.
    • Oh…lo siento, se me malinterprete. Voy a tener que pensar en ello y ver si puedo encontrar una solución.
    • La vieja pregunta ahora, pero esto es lo que yo estaba buscando. No sé la etiqueta en el punto de pedir una nueva pregunta simplemente por lo que esta respuesta está separado, aunque huele a rep acaparamiento.
  4. 1

    Esto es lo que hice.

                <GridView ColumnHeaderToolTip="Addendum Master" >
                        <GridViewColumn Width="500">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>                                    
                                    <StackPanel Orientation="Vertical" Margin="0">
                                        <Label Content="{Binding Path=Line1}" Padding="0" Margin="0" Style="{StaticResource GridLabelStyle}"></Label>
                                        <Label Content="{Binding Path=Line2}" Padding="0" Margin="0" Style="{StaticResource GridLabelStyle}"></Label>
                                        <Label Content="{Binding Path=Line3}" Padding="0" Margin="0" Style="{StaticResource GridLabelStyle}"></Label>
                                        <Label Content="{Binding Path=Line4}" Padding="0" Margin="0" Style="{StaticResource GridLabelStyle}"></Label>
                                    </StackPanel>                                                                        
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
        </ListView>
  5. 0

    Aquí es lo que yo siento es una solución simple a un problema que muchos tienen cuando se trata de 2 filas por registro, mientras que todavía siendo capaz de utilizar la paginación y ordenación etc. que viene con los controles gridview. Yo te daré el código y tratar de explicarlo lo mejor que pueda.

        <Columns>                            
            <asp:BoundField DataField="CPTCode" HeaderText="CPTCode" ItemStyle-CssClass="center" SortExpression="CPTCode" >
                <ItemStyle CssClass="center" />
            </asp:BoundField>
    
                <asp:BoundField DataField="InsPlanCode" HeaderText="InsPlanCode" ItemStyle-CssClass="center" SortExpression="InsPlanCode" >
                <ItemStyle CssClass="center" />
            </asp:BoundField>
    
                <asp:BoundField DataField="StartDate" HeaderText="Start Date" ItemStyle-CssClass="center" SortExpression="StartDate" >
                <ItemStyle CssClass="center" />
            </asp:BoundField>
    
                <asp:BoundField DataField="EndDate" HeaderText="End Date" ItemStyle-CssClass="center" SortExpression="EndDate" >
                <ItemStyle CssClass="center" />
            </asp:BoundField>
    
            <asp:BoundField DataField="UserName" HeaderText="UserName" ItemStyle-CssClass="center" >
                <ItemStyle CssClass="center" />
            </asp:BoundField>   
    
            <asp:TemplateField HeaderText=" " ItemStyle-CssClass="center" HeaderStyle-BackColor="AliceBlue" ItemStyle-BackColor="AliceBlue">                                
                <ItemTemplate>        
    
                    </td>
                    </tr>
                    <tr>
                        <td align="center" nowrap>&nbsp;<b>Message</b>&nbsp;</td>
                        <td colspan="10"><TABLE cellpadding=5><tr><td><%# Eval("carveOutMessage")%></td></tr></TABLE>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    
    </asp:GridView>

    El truco está en la costumbre TemplateField ItemTemplate.

    La primera cosa a saber es que lo que se representa en el código fuente html cuando se crea un TemplateField, es un nuevo abrir y cerrar etiqueta TD. después de la última columna se creó, a continuación, cierra la fila con una etiqueta de cierre.
    Para crear el templatefield abrir y cerrar, así como el abrir y cerrar ItemTemplate etiquetas. Dentro de que la primera cosa que quiero hacer es cerrar el abierto etiqueta td «» y, a continuación, el abierto de etiqueta tr «». A continuación, cree una nueva fila y una columna nueva con etiqueta. ahora bien, si la columna debe ser amplia para algún tipo de descripción o de las notas de la columna. uso columnspan = 10 o sin embargo muchos de los que necesitas. Debido a que el Templatefield va a cerrar la etiqueta TD su último td de la etiqueta no debe tener una etiqueta de cierre, y el último de la fila no debe tener un cierre de etiqueta TR debido a que será cerrado donde la etiqueta de cierre.

    Espero que esto ayude, y fue lo suficientemente claro para que la gente entienda. Usted puede usar este método para crear tantas filas como quieras por registro. También hacer cualquier número de otros formatos cosa si usted es cualquier bien con html y tablas. La clave es recordar que cuando usted comience a son de formato dentro de un abrir td y tr etiqueta y al final se va a escribir en un cierre de td y tr etiqueta para salir de su última columna y de fila abierta.

Dejar respuesta

Please enter your comment!
Please enter your name here