2010-10-26 7 views
5

Ho una semplice casella di riepilogo con più elementi che si adattano allo schermo. Se si scorre fino all'ultima voce, questa viene visualizzata ma poi torna indietro sullo schermo - Non posso lasciarlo in vista. Dopo un'ora di utilizzo di Google sembra essere un problema noto nelle prime versioni di Listbox, ma sembra essere il caso negli ultimi strumenti. Sembra anche che ci sia un problema con fixed heights e virtualization, ma setting the height at item level o livello casella di riepilogo non fa alcuna differenza. Vedo che la Listbox nel modello di app di WindowsPhoneDataBound funziona bene con lo scorrimento e senza altezze.Casella di riepilogo di Wp7 Scorrimento in PivotItem - Impossibile rimanere sull'ultimo elemento, l'altezza fissa non aiuta

Vorrei anche una soluzione senza altezze fisse in modo che non richieda un nuovo stato per l'orientamento orizzontale.

Qualche suggerimento, per favore?

La mia casella di riepilogo è in un UserControl che si trova in un PivotItem:

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

e il controllo utente:

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

qualche informazione in più: ho copiato e incollato il codice XAML esatta dal WindowsPhoneDataBoundApp (che funziona) nel mio UserControl in modo che appare come segue:

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

e non funziona ... quindi ha qualcosa a che fare con il PivotItem? Aggiornamento: Ho tolto questo codice dal PivotItem e funziona bene .. quindi qualche idea su come farlo funzionare in un pivotitem?

+0

Se codice l'altezza, risolve il mio problema, che è molto simile al tuo. Ho appena usato Height = 430 nella xaml nel mio controllo utente derivato da una listbox. – swinefeaster

risposta

2

avevo bisogno di questa cosa esatta e finito per legare il HEIGHT di casella di riepilogo al ActualHeight del StackPanel che lo contiene.

Così si potrebbe avere

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

Quindi, assicurarsi che lo StackPanel è impostata per riempire automaticamente qualsiasi spazio che è in e presto, la casella di riepilogo ridimensionerà alle dimensioni del suo StackPanel contenitore, e la logica lo scorrimento si calciare correttamente.

Si noti che questo si verifica principalmente quando il proprio oggetto termina con la definizione di elementi che possono variare in altezza. Se sono tutti della stessa altezza, di solito non è un problema.

+0

Questo funziona per me, poiché sto avendo lo stesso problema. Abilita lo scorrimento, ma sembra che l'altezza non sia ancora a posto, come quando faccio scorrere la lista, non arriva quasi fino in fondo. Sembra che l'area del perno in alto stia incasinando la misurazione dell'altezza? – swinefeaster

+0

Hmm. Non riesco a vedere questo comportamento, anche se non dubito che l'intestazione del pivot possa in qualche modo rovinare la finestra di scroll. – DarinH

1

Inserire una griglia attorno alla casella di riepilogo nell'articolo Pivot. Ciò costringerà la listbox in una modalità di scorrimento.

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

Grazie, ma è già in una griglia (ContentPanel)?Questo è quindi nel PivotItem. – Rodney

+0

Questo non ha funzionato per me – swinefeaster

0

ho risolto aggiungendo un margine inferiore al ItemsPanel che contiene gli elementi:

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

avevo uno ScrollViewer intorno a tutti i dati xaml e lo scorrimento della casella di riepilogo smesso di funzionare:

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

Dopo aver rimosso ScrollViewer, lo scorrimento degli elementi della lista ha funzionato di nuovo bene.