Finestre Wpf con immagine di sfondo e trasparenti

Windows Presentation Manager fra le molte frecce al suo arco ne offre diverse che permettono di modificare l’aspetto delle sue finestre, per default rettangolari. Qui ci occupiamo delle Window dotate di forma che dipende dall’immagine incorporata nel suo Background nonché caratterizzate da parziale trasparenza.

Il piccolo ma significativo esempio che varrà illustrato fa mostra di sé nella figura seguente:

dove al posto della solita finestra si ha la figura di un calciatore fluttuante sul desktop con due normali pulsanti (Button).  Per la cronaca, tale immagine deriva da una vecchia raccolta ClipArt97, tradotta dal formato WMF in PNG, che molti di noi avranno conservato... Quanto alla trasparenza essa fa sì che dietro le parti più chiare della figura siano visibili il sottostante desktop di Windows e altri documenti eventualmente aperti in quella posizione. 

Nota. Ovviamente i normali pulsantini tra cui la x di chiusura sono assenti. Per chiudere l’applicazione tutti se la cavano o con codice VB oppure, semplicemente, premendo Ctrl+F4.

Due parole in termini generali sull’argomento. La classe Window deriva da ContentControl e pertanto può racchiudere contenitori come StackPanel o Grid che comprendono oggetti vari (controlli in primo luogo) ed essere dotata di uno sfondo tramite la proprietà Background. Inoltre si può agire sulle proprietà BorderBrush e BorderThickness per modificare il bordo della finestra, in vari modi tra cui il più particolare consiste nel farle assumere contorni secondo una shape personalizzata (tipicamente con Path). In tal modo si possono ottenere finestre, per fare un solo esempio, in forma di nuvola, fumetto o altre più o meno fantasiose. Le mosse da compiere sono del tutto simili a quelle relative a un controllo (ne riparlerò, ma i più esperti possono cavarsela da soli, ragionando per analogia con i controlli di forma personalizzata).

Window con immagine di sfondo e trasparenti

Nel nostro esempio le proprietà della classe Window sono WindowsStyle e AllowsTransparency. La prima va posta a “None”, in modo da eliminare del tutto il bordo, mentre nessuno si sorprende scoprendo che la seconda va fissata a “True”.

Dopo di che si esamini il file primario XAML seguente, in cui le parti singolari sono state grassettate.

<Window x:Class="MainWindow" WindowStyle="None" AllowsTransparency="True"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="Finestra Wpf con immagine" Height="565" Width="473">

    <Window.Background>

        <ImageBrush ImageSource="C:\Calcio5.png" />

    </Window.Background>

    <Grid>

        <Grid.RowDefinitions>

            <RowDefinition />

            <RowDefinition />

            <RowDefinition />

        </Grid.RowDefinitions>

        <Button Margin="16,12,229,80" Content="Apri il modello" FontSize="24" />

        <Button Grid.Row="2" Margin="10,44,179,49" Content="Chiudi" FontSize="24"  />

    </Grid>

</Window>

 

Nota. Al posto di “C:\Calcio5.png” va inserito l’URI relativo. Ricordo che esso si ottiene collocando l’immagine nella cartella interna Images del progetto, mediante operazioni che fissano la proprietà ImageSource. Facilitate in WPF 2010 (con un provvidenziale pulsante etichettato “...”), comunque sono ben descritte in un paio di Forum, cui rimando. L’eseguibile così ottenuto dopo compilazione di fatto incorpora le figure “assoldate”, ovunque esso venga collocato.

Dopo quanto detto non occorrano commenti: il bello della programmazione dichiarativa sta nella sua eloquenza, specie in questi casi.