Archivio Categoria: uwp

Benvenuto Windows Community Toolkit

Se sviluppate app UWP avrete sicuramente avuto a che fare con l’UWP Community Toolkit e (se non lo avete mai fatto vi consiglio di farlo ūüėÄ ) che √® un vero e proprio cortellino svizzero per noi sviluppatori e ci permette di non dover reinvere la ruota.

Da pochi giorni è disponibile una nuove versione che porta un importante cambiamento, quello del nome del progetto che passa da UWP Community Toolkit a Windows Community Toolkit il che ci fà capire anche alla luce degli annunci di Build di qualche giorno fà come presto si arricchirà di nuovi elementi e funzionalità non solo per le UWP.

Al momento non possiamo comunque lamentarci, come √® possibile vedere nell’immagine i controlli presenti sono gi√† molti ed utilissimi e¬† sono di grandi aiuto insime ai vari Helpers, Service che ci permettono di avere funzionalit√† gi√† disponibile ad esempio per l’autenticazione sui vari social o l’utilizzo delle Notification.

Il modo migliore per avere una panoramica delle funzionalit√† disponibili √® quello di scaricare l’applicazione demo disponibile sullo store a questo indirizzo (al momento della scrittura di questo post l’applicazione ha ancora il vecchio nome ma verr√† aggiornato a breve)

Tutti i pacchetti del progetto sono disponibili su Nuget e se avete voglia di dare una mano il progetto è naturalmente OpenSource e disponibile su GitHub.

Se non lo avete mai utilizzato spero di avervi fatto cosa gradita a farvelo conoscere e come sempre

Buon Coding ūüėÄ

 

La Mixed Reality è qui

Con l’ultimo aggiornamento di windows 10 (il fall creators update) disponibile da pochi giorni la mixed reality entra nelle case di tutti a prezzi finalmente accessibili,prima d’ora infatti gli unici device a sfruttarla erano gli hololens con un prezzo decisamente proibitivo, adesso invece i nuovi device sono disponibili con prezzi di partenza sotto i 400‚ā¨ diventano decisamente pi√Ļ interessanti.

Noi italiani (purtroppo succede spesso) siamo stati lasciati indietro per ora visto che i device non sono disponibili nel nostro territorio ma basta recarsi nella versione inglese dello store di Microsoft o di Amazon per poterli comprare e farseli recapitare a casa.

Naturalmente anche io ho approfittato e devo dire che l’esperienza d’uso √® decisamente positiva (anche se gli hololens sono e rimarrano per molto un’altra cosa)

mixed_hp

Ma venendo a quello che ci interessa come sviluppatori come possiamo lavorarci?

Ci sono due strade per lo sviluppo:

  • Se vogliamo realizzare delle applicazioni immersive dobbiamo dotarci di Visual Studio 2017 in accoppiata con Unity che ci permetteranno di sfruttare tutta la potenza di questi device (maggiori dettagli qui)
  • altrimenti (e questa √® la cosa pi√Ļ interessante) tutte app UWP saranno da subito disponibili all’interno dell’ambiente virtuale senza nessuna modifica e pronte ad essere pinnate sul muro virtuale e fatte partire (maggiori informazioni qui). Naturalmente se vorremmo dare una migliore usabilit√† nell’ambiente 3d dovremo utilizzare qualche accorgimento nella realizzazione dell’interfaccia e gestire anche le altre forme di input disponibili come la voce o lo sguarda.

Come potete vedere di carne al fuoco ce n’√® veramente tanta e questi nuovi device non faranno altro che dare una maggiore spinta alle app UWP che adesso hanno trovato un’ulteriore casa

Vi aspetto nei prossimi articoli dove tratteremo pi√Ļ approfonditamente lo sviluppo sulla Mixed Reality , nel frattempo vi lascio il link dove trovare tutti i dettagli in merito https://developer.microsoft.com/en-us/windows/mixed-reality/development, e come al solito non mi resta altro che augurarvi buon coding ūüėÄ

 

 

Un nuovo mediacenter per Xbox su ioprogrammo

E’ stato pubblicato su ioprogrammo numero 2012 di aprile 2017 il mio articolo su come scrivere il proprio mediacenter per Xbox utilizzando tutta la potenza delle app UWP

4-212g

Utilizzare il ProgressRing nell’ActivityIndicator in Xamarin Forms

Su Xamarin forms per le app UWP il componente ActivityIndicator √® mappato sulla classe ProgressBar e come √® possibile¬†potete vedere nello screen non √® un comportamento congruente con le altre piattaforme e la momento¬†non c’√® modo di cambiarlo con un ProgressRing.

activityindicatorCon il meccanismo dei CustomRenderer possiamo ovviare a questo problema in modo molto semplice inserendo una semplice classe nel nostro progetto UWP

[assembly: ExportRenderer(typeof(ActivityIndicator), typeof(RingActivityIndicatorRenderer))]
namespace DoGethersApp.UWP
{
    public class RingActivityIndicatorRenderer : ViewRenderer<ActivityIndicator, Windows.UI.Xaml.Controls.ProgressRing>
    {
        private Brush foregroundDefault;
        protected override void OnElementChanged(ElementChangedEventArgs e)
        {
            base.OnElementChanged(e);
            if (e.NewElement != null)

            {
                if (Control == null)
                {
                    SetNativeControl(new Windows.UI.Xaml.Controls.ProgressRing());
                    Control.Loaded += OnControlLoaded;
                }
                UpdateIsRunning();
            }
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
            if (e.PropertyName == ActivityIndicator.IsRunningProperty.PropertyName)
            {
                UpdateIsRunning();
            }

            else if (e.PropertyName == ActivityIndicator.ColorProperty.PropertyName)
            {
                UpdateColor();
            }
        }

        void OnControlLoaded(object sender, RoutedEventArgs routedEventArgs)
        {
            foregroundDefault = Control.Foreground;
            UpdateColor();
        }

        void UpdateColor()
        {
            Color color = Element.Color;
            if (color == Color.Default)
            {
                Control.Foreground = foregroundDefault;
            }
            else
            {
                Control.Foreground = color.ToBrush();
            }
        }

        void UpdateIsRunning()
        {
            Control.IsActive = Element.IsRunning;
        }
    }

    internal static class ConvertExtensions
    {

        public static Brush ToBrush(this Color color)
        {
            return new SolidColorBrush(color.ToWindowsColor());
        }

        public static Windows.UI.Color ToWindowsColor(this Color color)
        {
            return Windows.UI.Color.FromArgb((byte)(color.A * 255), (byte)(color.R * 255), (byte)(color.G * 255), (byte)(color.B * 255));
        }
    }
}

in questo modo verranno modificati tutti gli¬†ActivityIndicator per utilizzare il ProgressRing, se vogliamo avere per√≤ maggior libert√† e decidere se ¬†e quando utilizzarlo ci baster√† fare nel progetto comune una nuova classe che estende¬†ActivityIndicator e modificare il CustomRender facendo riferimento a quest’ultima classe.

In questo modo potremo decidere su utilizzare una o l’altra a seconda delle esigenze, sulle altre piattaforme sar√† visualizzato sempre lo stesso componente mentre su windows verr√† visualizzato un tipo di progressbar o l’altra in base alla classe che utilizzeremo.

Buon coding!!!

 

UWP: ricreiamo la funzione ToTitleCase

Come ben sappiamo la piattaforma UWP non dispone di tutte le funzionalità presenti nella versione del .Net Framework versione desktop. Una funzione che può essere utile in alcuni casi è ToTitleCase che come possiamo intuire dal nome converte il testo in parole con iniziali maiuscole come è possibile vedere nella documentazione ufficiale

https://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

La¬†versione standard permette di fare controlli pi√Ļ fini anche in base alla lingua di sistema ma se abbiamo bisogno solo della sua funzione base possiamo¬†utilizzare questo semplice metodo

public string toTitleCase(string value)
{
    if (value == null)
        return null;
    if (value.Length == 0)
        return value;

    StringBuilder result = new StringBuilder(value);
    result[0] = char.ToUpper(result[0]);
    for (int i = 1; i < result.Length; ++i)
    {
        if (char.IsWhiteSpace(result[i - 1]))
            result[i] = char.ToUpper(result[i]);
        else
            result[i] = char.ToLower(result[i]);
    }
    return result.ToString();
}

che converte in maiuscolo l’iniziale di ogni parola ed in minuscolo quelle seguenti.

Una piccola utility che a volte può tornare utile

Buon coding!!!

UWP: Utilizzare immagini diverse in base al tema corrente

Una delle esigenze che maggiormente occorre tenere in considerazione nello sviluppo di un’app, soprattutto in ambito mobile, √® quella di essere coerenti con il tema che l’utente st√† utilizzando, per visualizzare elementi grafici che siano ben visibili¬†ed evitare ad esempio pulsanti con immagini che si confondono con il colore di base del tema e diventano praticamente invisibili.

Una delle funzionalit√† pi√Ļ comode del framework sono i¬†qualificatori che permettono tramite una determinata formattazione del nome del file o della cartella in cui esso √® inserito di specificare se e quando deve essere utilizzato. Lo standard da utilizzare √® del tipo

[resourceName].[qualifierString].extension

Come abbiamo detto √® possibile utilizzarlo in due diversi modi, o creando una cartella con l’apposito nome

xaml-layout-view-ex-2

oppure specificandolo nel nome del file

xaml-layout-view-ex-1

a questo indirizzo è disponibile un elenco dei qualificatori utilizzabili per discriminare in base alla lingua, risoluzione dello schermo ecc.

https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.applicationmodel.resources.core.resourcecontext.qualifiervalues.aspx

Quello che a quanto pare non viene citato nella documentazione ufficiale è la possibilità di utilizzare anche un qualificatore per indicare il tipo di tema a cui la risorsa deve fare riferimento utilizzando

theme-[dark/light]

in questo esempio

theme-dark.PNG

verr√† utilizzata normalmente l’icona delete.png quando vi sar√† fatto riferimento e solo in caso di tema scuro essa verr√† sostituita da delete.theme-dark.png

Una soluzione decisamente interessante, soprattutto se state realizzando una UWP con Xamarin dove sar√† pi√Ļ difficile accedere alle impostazioni del tema.

Rigrazio Fela per avermi fatto scoprire questa soluzione dopo averla cercata per ore ūüėÄ spero possa essere utile anche a voi.

Buon coding!!

Eliminare le lingue non inserite quando si invia un’app UWP allo store

Se state sviluppando un’app solo a livello nazione per cui non volete inserire la lingua inglese potreste ritrovarvi¬†la richiesta , anche se non avete inserito i relativi file, di compilare¬†i dati nello store anche¬†per questa lingua nel momento in cui la invierete.

Questo problema si presenta quando una libreria che stiamo utilizzando contiene già alcuni file localizzati, ad esempio per gestire i messaggi di errore (es. MVVM Light), in questo caso Visual Studio generà erroneamente anche il pacchetto per la lingua inglese.

Per risolvere il problema basterà aprire il file di progetto ed aggiungere la seguente riga
<SkipIntermediatePriGenerationForResourceFiles>false</SkipIntermediatePriGenerationForResourceFiles>

subito dopo l’apertura del primo tag¬†PropertyGroup che troverete in modo da avere una situazione del genere

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
 <PropertyGroup>
 <SkipIntermediatePriGenerationForResourceFiles>false</SkipIntermediatePriGenerationForResourceFiles>
 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

Se avete dei problemi a trovare il¬†file di progetto potete scaricare il progetto facendo tasto destro sull’elemento

unload_menu

e poi editarlo sempre utilizzando il tasto destro sul progetto scaricato

edit_project

una volta modificato il file, sempre con il tasto destro, sarà possibile ricaricarlo.

NB: Potreste ritrovarvi con un messaggio di errore simile a questo

err_1potete tranquillamente ignorarlo e caricare il vostro progetto.

Se adesso genererete il vostro pacchetto e lo invierete allo store vedrete che verranno richiesti i dettagli esclusivamente per le lingue effettivamente incluse nella vostra app

Grazie a Fela per il tip!!!

Buon coding!!

Due utili estensioni per generare gli asset delle nostre UWP

A tutti sarà successo di dover creare i vari asset per le nostre app e di aver perso molto tempo con i vari photoshop  o simili per ridimensionare tutte le immagini nelle giuste dimensioni, voglio quindi segnalarvi due estensioni per Visual Studio che possono permetterci di risparmiare un pò di tempo facendo il lavoro per noi.

UWP Tile Generator

E’ l’estensione pi√Ļ semplice da usare. Permette partendo da un file immagine PNG o SVG di generare tutte le immagini di cui abbiamo bisogno.

Una volta installata facendo click con il tasto detro del mouse su un file compatibile avremo a disposizione due¬†nuove voci nel men√Ļ contestuale

uwp20context

che ci permetteranno di generare tutti i file per le nostre Tile oppure per lo splash screen.

I sorgenti del progetto sono anche disponibili su GitHub,¬†quindi se volete potete partecipare allo sviluppo potete farvi avanti ūüėÄ

UWP Visual Assets Generator

Ha sostanzialmente le stesse funzioni di UWP Tile Generator ma con molte pi√Ļ opzioni che permettono di selezionare quali file generare e che caratteristiche devono avere e come potete vedere nella schermata √® un p√≤ pi√Ļ complessa nell’utilizzo.

screenshot

Questa estensione oltre ai file SVG e PNG permette di aprire anche file JPG e GIF ma di contro non dispone della possibilit√† di essere lanciata con il tasto destro su un’ immagine ma dovremmo lanciare la relativa finestra da

View -> Other Windows -> UWP Visual Assets Generator

Quale utilizzare?

Come sempre non c’√® una scelta giusta ma occorre sempre decidere quale √®¬†pi√Ļ √® utile nel nostro caso.

Se non volete preoccuparvi dei dettagli ma solo avere le vostre icone generate in automatico UWP Tile Generator è forse la scelta migliore, se invece volete avere controllo su tutti i file generati UWP Visual Assets Generator farà al vostro caso.

Voi quale avete scelto? Ne conoscete altre? Fatemi sapere nei commenti

Buon coding!!

Windows 10 Anniversary Update è arrivato

Da pochissimi giorni √® disponibile l’aggiornamento di Windows 10 chiamato Anniversary Update sulle varie piattaforme (XBox, PC, Iot,Hololens) al momento manca all’appello solo la versione per mobile ma dovrebbe essere questione di pochissime settimane.

Questo aggiornamento introduce importanti novit√† sia per gli utenti (basta citare l’inserimento della Shell Bash ūüėÄ ) che¬†per gli sviluppatori come l’apertura dello store alle app convertite con il Desktop Bridge o le nuove api per Cortana e¬†Windows Ink

Per tutti i dettagli sull’aggiornamento e per i link per scaricare l’SDK aggiornato √® possibile far riferimento alla pagina ufficiale del rilascio¬†https://blogs.windows.com/buildingapps/2016/08/02/windows-10-anniversary-update-sdk-14393

Per utilizzare il nuovo SDK vi basterà cambiare la versione Target nelle impostazioni del progetto, ma se avete qualche dubbio in merito è stata creata anche una pagina apposita con tutte le istruzioni passo passo

https://blogs.msdn.microsoft.com/visualstudio/2016/08/02/universal-windows-apps-targeting-windows-10-anniversary-sdk/

Se siete arrivati a questo punto della lettura non posso far altro che augurarvi buon coding ūüėÄ

UWP: ListView con larghezza degli elementi al 100%

Se volete che in una vostra app gli elementi di una ListView occupino il 100% dello spazio disponibile orizzontalmente dovrete andare a modificare il tema del controllo ListView e non sar√† sufficiente utilizzare la solita propriet√†¬†HorizontalAlignment=”Stretch” del controllo in questione.

Lo stile che andr√† modificato √® pi√Ļ precisamente¬†l’ItemContainerStyle.

E’ possibile farlo in modo molto semplice utilizzando le seguenti righe da codice da inserire all’interno del tag <ListView><ListView> della vostra app

<ListView.ItemContainerStyle>
 <Style TargetType="ListViewItem">
 <Setter Property="HorizontalContentAlignment" Value="Stretch" />
 </Style>
 </ListView.ItemContainerStyle>

Buon coding!!

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi