1 messaggio dal 04 febbraio 2016
Salve, grazie al vostro libro mi sto orientando verso C# dal mio vecchio Visual Basic. Avendo sempre programmato applicazioni Windows Form ho voluto cimentarmi con un applicazione Universal Windows Platforms e dopo facili entusiasmi mi sono fermato su un problema che non riesco a risolvere ne trovare adeguate risposte in internet. Nella mia applicazione ho una ListBox dove inserisco i record del mio data base funziona tutto benissimo se io dò delle dimensione fisse al mio controllo: appaiono le scrollbar e posso scorrere tutti i miei dati. Ma volendo estendere l'altezza della ListBox a tutta l'altezza dell'applicazione comincio ad avere qualche problema. Se inserisco nel XAML il codice:
Height="{Binding ElementName= grid, Path= ActualHeight}"
dove grid e il nome del controllo che contiene la listBox, questa si adatta alle dimensioni ma scompare la scrollBar rendendo impossibile lo scorrimento dei record. Con le applicazione Windows Form era semplice risolvere il problema ma qui non so proprio cosa fare, ringrazio chiunque vorrà darmi un aiuto.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, buon ferragosto!

Con le applicazioni UWP (e WPF) non è necessario impostare esplicitamente altezza e larghezza come si faceva con WinForms, soprattutto nel tuo caso, quando vuoi che un controllo come la ListBox occupi tutto lo spazio disponibile.

Esisono degli appositi controlli di layout come Grid, StackPanel, RelativePanel e Canvas che si occupano di "gestire lo spazio a disposizione" per i controlli che gli inserisci all'interno. Studiali, sono presantati qui:
https://msdn.microsoft.com/it-it/windows/uwp/layout/layout-panels

Nel tuo caso potrebbe essere idonea la Grid, che ti permette di realizzare uno spazio tabellare.
Ipotizziamo che nella tua pagina ci sia una TextBlock per il titolo e una ListBox per la lista. Crea dunque una Grid con due righe: la prima avrà un'altezza "Auto", cioè esattamente uguale ai controlli che contiene e la seconda avrà un'altezza "*", cioè pari allo spazio restante nella finestra.
<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="*" />
  </Grid.RowDefinitions>

  <!-- Qui va la TextBlock e la ListBox -->
</Grid>

Ora che hai definito che questa Grid ha due righe, andiamo a posizionare al suo interno la TextBlock e la ListBox.
Sui controlli che si trovano all'interno della Grid puoi apporre delle proprietà Grid.Row e Grid.Column che ti consentono di indicare la loro appartenenza ad una data riga/colonna della Grid stessa.
Queste si chiamano "Attached properties".

Ecco l'esempio completo in cui la TextBlock viene assegnata alla prima riga (indice 0) e la ListBox alla seconda (quella con altezza *, con indice 1).

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="*" />
  </Grid.RowDefinitions>
  
  <TextBlock FontSize="30" Grid.Row="0">Pagina di elenco</TextBlock>
  <ListBox Grid.Row="1">
  </ListBox>
</Grid>


Ecco come apparirà, nota la barra di scorrimento sulla destra:
https://1drv.ms/i/s!Ao4rhSdtDw8rgZswqA7KHxWg4WtGYQ


Con le applicazione Windows Form era semplice

Non è stato più semplice con lo XAML? :)

ciao,
Moreno
Modificato da BrightSoul il 15 agosto 2016 10.01 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.