11 messaggi dal 19 marzo 2004
Ciao a tutti.
Apro questa discussione sperando che qualcuno sappia darmi una risposta definitiva riguardo l'impostazione della larghezza/altezza automatica in Silverlight 2.0.

Riporto a seguire un pezzo di codice banalissimo che ho scritto. Si tratta di un controllo con una Grid a due righe: una contiene una ListBox e l'altra un pulsante.

Entrambi i controlli utente sono posizionati senza dimensioni fisse, quindi la loro occupazione dovrebbe essere massima all'interno della Grid "padre". La stessa Grid è contenuta all'interno della Grid di Layout con dimensioni automatiche.

Se provate a visualizzare il codice XAML, viene renderizzato tutto come previsto. Putroppo, applicando il tema "ExpressionDark" o un altro qualsiasi dei temi presenti nel Toolkit (Dicembre 2008), la larghezza e altezza dei contenuti va a perdersi. Lo stesso codice con il tema applicato è riportato (commentato) a fondo pagina.

Ho cercato una soluzione sul web, senza successo...
Come è possibile che la semplice applicazione di un tema influisca sul layout generale del controllo?

Chiaramente vorrei utilizzare dimensionamenti automatici per mantenere un layout fluido dell'intero controllo (quindi della pagina in cui sarà mostrato), quindi ho escluso le dimensioni fisse a priori.

Nella speranza che qualche anima pia sappia darmi una soluzione oppure stroncarmi con un "Non c'è niente da fare", ringrazio tutti...

Saluti.
Mauro

<UserControl x:Class="ProgettoProva.PageEditor" 
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:theming="clr-namespace:Microsoft.Windows.Controls.Theming;assembly=Microsoft.Windows.Controls.Theming"
             xmlns:ed="clr-namespace:Microsoft.Windows.Controls.Theming;assembly=Microsoft.Windows.Controls.Theming.ExpressionDark"
             mc:Ignorable="d" d:DesignHeight="400" d:DesignWidth="600" >

    <Grid x:Name="LayoutRoot" Background="White">
            <Grid>
              <Grid.RowDefinitions>
                <RowDefinition Height="100"/>
                <RowDefinition Height="*" />
              </Grid.RowDefinitions>
              <ListBox x:Name="listEntities" />

              <Button x:Name="button" Grid.Row="1" Content="test" />

            </Grid>
    </Grid>
</UserControl>
<!-- *** UserControl con tema impostato
    <Grid x:Name="LayoutRoot" Background="White">
        <ed:ExpressionDarkTheme>
            <Grid>
              <Grid.RowDefinitions>
                <RowDefinition Height="100"/>
                <RowDefinition Height="*" />
              </Grid.RowDefinitions>
              <ListBox x:Name="listEntities" />

              <Button x:Name="button" Grid.Row="1" Content="test" />

            </Grid>
        </ed:ExpressionDarkTheme>
    </Grid>
-->
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
maurosoft wrote:
Ciao a tutti.
Ciao,
Entrambi i controlli utente sono posizionati senza dimensioni fisse, quindi la loro occupazione dovrebbe essere massima all'interno della Grid "padre". La stessa Grid è contenuta all'interno della Grid di Layout con dimensioni automatiche.
giusto,
Se provate a visualizzare il codice XAML, viene renderizzato tutto come previsto. Putroppo, applicando il tema "ExpressionDark" o un altro qualsiasi dei temi presenti nel Toolkit (Dicembre 200 , la larghezza e altezza dei contenuti va a perdersi. Lo stesso codice con il tema applicato è riportato (commentato) a fondo pagina.

Ho cercato una soluzione sul web, senza successo...
Come è possibile che la semplice applicazione di un tema influisca sul layout generale del controllo?
è possibile in quanto il sistema di theming in corso di sviluppo si pone come "cappello" sopra i controlli ridefinendo le proprietà che infuiscono su tutte quelle caratteristiche "visuali" dei controlli interni. Nel tuo esempio il ControlTemplate dell'ExpressionDarkTheme ha i seguenti valori predefiniti:
<Setter Property="HorizontalContentAlignment" Value="Left" /> <Setter Property="VerticalContentAlignment" Value="Top" />
con i quali viene impostato un allineamento a sinistra ed in alto al primo controllo contenuto, con questi valori il tuo Grid non si allarga più per occupare tutta l'area disponibile ma semplicemente si allinea adattandosi ai contenuti delle proprie celle.

Chiaramente vorrei utilizzare dimensionamenti automatici per mantenere un layout fluido dell'intero controllo (quindi della pagina in cui sarà mostrato), quindi ho escluso le dimensioni fisse a priori.
Fortunatamente queste cose sono fatte veramente bene in XAML, quindi ti è sufficiente assegnare i valori a te più adatti in modo da sovrascrivere le impostazioni di base:
<ed:ExpressionDarkTheme HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" >

Nella speranza che qualche anima pia sappia darmi una soluzione oppure stroncarmi con un "Non c'è niente da fare", ringrazio tutti...
XAML, WPF ed in generale gli ultimi "foundation" sono così complessi che c'è da indagare prima di dire "Non c'è niente da fare"!
Saluti.
Mauro
ciao!

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
11 messaggi dal 19 marzo 2004
Alessio,
prima di tutto ti ringrazio per la gentilissima risposta. Ho fatto come mi hai consigliato e tutto è tornato alla normalità, con un layout fluido e massimizzato per tutte le dimensioni dell'area del plugin Silverlight.

Le avevo provate proprio tutte prima di chiedere aiuto: tutte eccetto questa (a quanto pare)...

Comunque, se posso, approfitterei ancora di te per un consiglio. Poichè l'argomento è un po' diverso, ho aperto un'altra discussione riguardante la Localizzazione di applicazioni Silverlight sperando che possa essere d'aiuto anche ad altre persone.

Ciao.
Mauro

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.