none
¿Por qué un Grid dentro de un ItemTemplate no coge todo el ancho disponible? RRS feed

  • Pregunta

  • Buenas!

    Estoy tratando de mostrar dentro de mi control Panorama una lista cuyos elementos sean controles grid. Cada control grid debería ocupar el ancho completo de manera que las dos columnas de la derecha de todos los grids deberían quedar alineadas en la misma posición a la derecha de la pantalla.

    En su lugar cada grid parece tener un ancho diferente (ajustado al tamaño de los elementos contenidos en la columna de ancho *) quedando por tanto las dos columnas de la derecha en una posición diferente para cada item del control List. He pegado el código XAML por si alguien ve donde está el problema.

     

    <Grid x:Name="LayoutRoot" Background="Transparent">
     
     <!--Panorama control-->
     <controls:Panorama Title="My example">
     	<controls:PanoramaItem Header="List" Height="577" VerticalAlignment="Top" >
     		<ListBox Margin="0,-3,-12,-2" ItemsSource="{Binding Items}" HorizontalAlignment="Stretch">
     			<ListBox.ItemTemplate>
     				<DataTemplate>
    					<!-- Este es el grid que yo espero que siempre cubra todo el ancho del ListBox
    					(que debe ser el mismo para todos los items) -->
    					<Grid HorizontalAlignment="Stretch">
    						<Grid.ColumnDefinitions>
    							<ColumnDefinition Width="50"></ColumnDefinition>						<!-- Esta columna es la que acaba determinando el ancho del grid dependiendo de su tamañp -->
     							<ColumnDefinition Width="*"></ColumnDefinition>
     							<ColumnDefinition Width="95"></ColumnDefinition>
     							<ColumnDefinition Width="110"></ColumnDefinition>							 	
     						</Grid.ColumnDefinitions>
     						<Grid.RowDefinitions>
     							<RowDefinition Height="49"></RowDefinition>
     							<RowDefinition Height="49"></RowDefinition>
     							<RowDefinition Height="17"></RowDefinition>
    						</Grid.RowDefinitions>
    						
    						<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="4" Text="{Binding Title}" /><Image Grid.Row="1" Grid.Column="0" Height="50" Width="50" Source="{Binding imagePath}" /> 														
     						
    						<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding LineTwo}" /> 																
    						<TextBlock Grid.Row="1" Grid.Column="2" Text="{Binding Value}" /> 							 
    	 					<TextBlock Grid.Row="1" Grid.Column="3" Text="{Binding Value2}" /> 							 	 														
    
    						<TextBlock Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="4" Text="{Binding LineThree}"/>								 					
    					</Grid>
     				</DataTemplate>
     			</ListBox.ItemTemplate>
     		</ListBox>
     	</controls:PanoramaItem>
     </controls:Panorama>
     </Grid> 
    


     

     

    Muchas gracias y un saludo!




    viernes, 26 de agosto de 2011 11:38

Respuestas

  • Hola Sergio

    Esto también pasa en los ListBox de WPF y Silverlight, se debe a que el ListBoxItem tiene el ancho ajustado a su contenido.

    En WPF y Silverlight se corrige usando el relative source y findancestor para obtener el tamaño del ListBox, pero en Windows Phone no existe el relative source ni el findAncestor. La solución que te queda es especificar el Width de la grid a mano. La parte buena es que como el tamaño de la pantalla es siempre fijo 480x800, no vas a tener problemas de adaptación.

    Un saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    viernes, 26 de agosto de 2011 12:02
    Moderador

Todas las respuestas

  • Hola Sergio

    Esto también pasa en los ListBox de WPF y Silverlight, se debe a que el ListBoxItem tiene el ancho ajustado a su contenido.

    En WPF y Silverlight se corrige usando el relative source y findancestor para obtener el tamaño del ListBox, pero en Windows Phone no existe el relative source ni el findAncestor. La solución que te queda es especificar el Width de la grid a mano. La parte buena es que como el tamaño de la pantalla es siempre fijo 480x800, no vas a tener problemas de adaptación.

    Un saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    viernes, 26 de agosto de 2011 12:02
    Moderador
  • Ok esta claro, como siempre muchas gracias Josue :)
    viernes, 26 de agosto de 2011 12:55