2010-10-26 4 views
5

Tengo un cuadro de lista simple con más elementos de los que caben en la pantalla. Si se desplaza al último elemento que se muestra, pero luego vuelve a caer fuera de la pantalla, no puedo dejarlo a la vista. Después de una hora de Google, parece ser un problema conocido en las primeras versiones de Listbox, pero todavía parece ser el caso en las últimas herramientas. También parece haber un problema con fixed heights y virtualization, pero setting the height at item level o el nivel de cuadro de lista no hace diferencia. Veo que Listbox en la plantilla de la aplicación WindowsPhoneDataBound funciona bien con desplazamiento y sin alturas.Wp7 Problema de desplazamiento del cuadro de lista en PivotItem - No puede permanecer en el último elemento, la altura fija no ayuda

También me gustaría una solución sin alturas fijas para que no requiera un nuevo estado para la orientación horizontal.

¿Alguna sugerencia por favor?

Mi cuadro de lista está en un control de usuario que está en un PivotItem:

 <controls:PivotItem x:Name="pivotItemSetup" Header="setup"> 
      <local:listBoxBlindsControl Margin="0,0,-12,0"/> 
     </controls:PivotItem> 

y el control de usuario:

<Grid x:Name="LayoutRoot" Background="Transparent"> 
     <ListBox x:Name="listBoxBlinds" ItemsSource="{Binding BlindSet.Blinds}" SelectionChanged="MainListBox_SelectionChanged" Height="500"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid Height="80" Margin="0,0,0,17" Width="103"> 
         <StackPanel Orientation="Horizontal" Visibility="{Binding IsBreak, ConverterParameter=true, Converter={StaticResource boolToVisibility}}" VerticalAlignment="Top" d:LayoutOverrides="Width"> 
          <TextBlock Text="{Binding LevelNumber, ConverterParameter='level \{0\} - ', Converter={StaticResource stringTextConverter}}" TextWrapping="NoWrap" Margin="0" Style="{StaticResource PhoneTextExtraLargeStyle}" d:LayoutOverrides="Width"/> 
          <TextBlock Text="{Binding SmallBlind, ConverterParameter=\{0\}/, Converter={StaticResource stringTextConverter}}" TextWrapping="NoWrap" Margin="0" Style="{StaticResource PhoneTextExtraLargeStyle}" d:LayoutOverrides="Width"/> 
          <TextBlock Text="{Binding BigBlind}" TextWrapping="NoWrap" Margin="0" Style="{StaticResource PhoneTextExtraLargeStyle}" d:LayoutOverrides="Width"/> 
         </StackPanel> 
         <TextBlock x:Name="txtbreak" Text="break" TextWrapping="NoWrap" Margin="0,0,0,23" Style="{StaticResource PhoneTextExtraLargeStyle}" d:LayoutOverrides="Width, Height" Visibility="{Binding IsBreak, ConverterParameter=false, Converter={StaticResource boolToVisibility}}" Foreground="{StaticResource PhoneAccentBrush}" /> 
         <StackPanel Orientation="Horizontal" Margin="0,0,0,23" VerticalAlignment="Bottom" d:LayoutOverrides="Width"> 
          <TextBlock Text="{Binding MinutesPerBlind, ConverterParameter=\{0\} minutes, Converter={StaticResource stringTextConverter}}" TextWrapping="NoWrap" Margin="0" Style="{StaticResource PhoneTextSubtleStyle}" d:LayoutOverrides="Width"/> 
          <TextBlock Text="{Binding Ante, ConverterParameter=\, \{0\} ante, Converter={StaticResource stringTextConverter}}" TextWrapping="NoWrap" Margin="0" Style="{StaticResource PhoneTextSubtleStyle}" d:LayoutOverrides="Width" Visibility="{Binding Ante, ConverterParameter=0, Converter={StaticResource valueToVisibility}}"/> 
         </StackPanel> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </Grid> 

algo más de información: He copiado y pegado el XAML exacta de la WindowsPhoneDataBoundApp (que trabaja) en mi usercontrol de modo que ahora se ve así:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <ListBox x:Name="listBoxBlinds" Margin="0,0,-12,0" ItemsSource="{Binding BlindSet.Blinds}" SelectionChanged="MainListBox_SelectionChanged"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Margin="0,0,0,17" Width="432"> 
        <TextBlock Text="{Binding LevelNumber}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
        <TextBlock Text="{Binding SmallBlind}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 

y no funciona ... ¿es algo relacionado con PivotItem? Actualización: Saqué este código del PivotItem y funciona bien ... ¿Alguna idea de cómo hacerlo funcionar en un elemento pivote?

+0

Si codifico la Altura, corrige mi problema, que es muy similar al suyo. Acabo de usar Height = 430 en el xaml en mi control de usuario que se deriva de un listbox. – swinefeaster

Respuesta

2

Necesité esta cosa exacta y terminé simplemente vinculando la ALTURA del cuadro de lista con el PESO REAL del panel de distribución que lo contiene.

lo que podría tener

<controls:PivotItem Header="Destinations" Margin="0,0,12,0" Name="pvtItemDestinations"> 
    <StackPanel Name="stkDestinations"> 
     <ListBox Name="lstDestinations" 
       HorizontalContentAlignment="Stretch" 
       Height="{Binding ElementName=stkDestinations, Path=ActualHeight, Mode=OneWay}"> 
      <ListBox.ItemTemplate> 
       ... 
       xaml continues 
       ... 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </StackPanel> 
</controls:PivotItem> 

A continuación, asegúrese de que el StackPanel se establece para rellenar automáticamente cualquier espacio que se encuentra en y listo, el cuadro de lista cambiará de tamaño para el tamaño de su StackPanel contenedor, y la lógica de desplazamiento lo harán patear apropiadamente.

Tenga en cuenta que esto se aplica principalmente cuando su elemento plantilla termina definiendo elementos que pueden variar en altura. Si todos tienen la misma altura, generalmente no es un problema.

+0

Esto funciona para mí, ya que estoy teniendo el mismo problema. Permite el desplazamiento, pero parece que la altura no es del todo correcta, ya que cuando me desplazo por el cuadro de lista, no llega al fondo. Parece que el área de pivote en la parte superior está estropeando la medición de altura? – swinefeaster

+0

Hmm. No parece estar viendo ese comportamiento, aunque no dudo que el encabezado pivote podría estar estropeando la ventana de desplazamiento de alguna manera. – DarinH

1

Ponga una Grilla alrededor de su cuadro de lista en el elemento pivote. Esto forzará el listbox en un modo de desplazamiento.

<controls:PivotItem x:Name="pivotItemSetup" Header="setup"> 
    <Grid> 
    <local:listBoxBlindsControl Margin="0,0,-12,0"/> 
    </Grid> 
</controls:PivotItem> 
+0

Gracias, pero ya está en una cuadrícula (ContentPanel)?Esto es entonces en el PivotItem. – Rodney

+0

Esto no funcionó para mí – swinefeaster

0

He resuelto esto añadiendo un margen inferior a la ItemsPanel que contiene los artículos:

<ListBox> 
    <ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel Margin="0,0,0,96" /> 
    </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
    ... 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
0

que tenía un ScrollViewer alrededor de todos los datos xaml y el desplazamiento para el cuadro de lista dejado de funcionar:

<ScrollViewer> 
    <Grid> 
     <control:Pivot> 
      <control:PivotItem> 
       <Grid> 
        <Listbox> 
        ... 

Después de eliminar el ScrollViewer, el desplazamiento de los elementos del cuadro de lista funcionó bien de nuevo.

Cuestiones relacionadas