Archivi Tag: programmazione

Utilizzare edge come motore web nelle app win32

Uno dei componenti più utilizzato all’interno delle nostre app Win32 è il controllo WebView che permette di visualizzare dati html all’interno di essi.

Il problema di questo componente è che utilizza come motore di rendering Internet Explorer che su windows 10 è ormai stato sostituito da Edge, in questo articolo vedremo come utilizzare Edge come  componente webview grazie alle nuove funzionalità aggiunte nelle ultime versioni del Windows Community Toolkit.

Il primo passo sarà creare un progetto di tipo Windows Forms App.

Fatto questo dovremo proseguire andando ad aggiungere il pacchetto nuget Microsoft.Toolkit.Win32.UI.Controls al nostro progetto

Fatto questo dovremo andare ad aggiungere il nostro componente alla Toolbox per poterlo utilizzare, dovremo quindi andare nella toobox, fare tasto destro e selezionare choose items. Fatto questo nella sezione dei componenti del Framework .net possiamo andare ad aggiungere il componente andando a cercare il file Microsoft.Toolkit.Win32.UI.Controls.dll della cache di nuget che che si trova nella directory %userprofile%\.nuget\packages che ad esempio sul mio pc corrisponde alla cartella

C:\Users\NomeUser\.nuget\packages\microsoft.toolkit.win32.ui.controls\3.0.0\lib\net462

fatto questo avremo il nostro controllo webview che potremo trascinare nella nostra form per utilizzarlo.

Per vedere l’effettiva differenza possiamo affiancare il nuovo controllo WebView al vecchio WebBrowser e vedere andanda sulla pagina di test http://html5test.com/ come effettivamente stiamo utilizzando edge al posto del vecchio Internet Explorer

edgewin32

Adesso non avete più scusa per non aggiornare le vostre app 😀

Buon Coding!!!

.Net standard su IoProgrammo

Questo mese su IoProgrammo numero 223 troverete il mio nuovo articolo sul framework .net standard, in’interessante tecnologia che ci permette di riutilizzare il nostro codice in tutte le tipologie di progetti.

Direi decisamente da non perdere 😀

Buon coding!!

Mixed reality su ioprogrammo

Questo mese su IoProgrammo numero 221 di Dicembre troverete il mio nuovo articolo sulla Mixed Reality per creare il vostro primo gioco!

Direi decisamente da non perdere 😀

Buon coding!!

Project Rome e cross device su IoProgrammo

ioprogrammo_july2017

Questo mese su IoProgrammo numero 215 di Luglio troverete il mio nuovo articolo su Project Rome e come utilizzarlo per condividere dati e funzionalità tra le varie piattaforme su cui la vostra applicazione è disponibile.

Una funzionalità disponibile in windows 10 che potrà dare una marcia in più alle vostre applicazioni.

Buon coding!!

 

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

Visual studio per Mac, facciamo un pò di chiarezza

Durante Connect() nel mese di novembre è stato presentato Visual Studio per Mac. Essendo fruitore di molti forum tecnici ho visto molta confusione su cosa sia questo IDE e cosa permetta effettivamente di poter sviluppare, vediamo quindi di fare un pò di chiarezza sull’argomento.

Partendo dall’annuncio ufficiale

https://msdn.microsoft.com/magazine/mt790182?f=255&MSPPError=-2147217396

possiamo vedere chiaramente qual’è lo scopo di questo IDE

The primary workloads supported by Visual Studio for Mac are native iOS, Android and Mac development via Xamarin, and server development via .NET Core with Azure integration. It gives you all the tools you need to develop the rich, native mobile app experiences that users expect today, and the cloud-based server back ends to power them.

Quello che possiamo quindi realizzare sono

  • Applicazioni Xamarin per iOS, Android e Mac, quindi lo sviluppo di app UWP e Windows/ Windows Phone 8.1 non è supportato
  • Applicazioni .NET Core

Osservando poi bene l’IDE

IC863335

chi ha già utilizzato Xamarin Studio su Mac non potrà non notare come i due ambiente siano praticamente identici, Visual Studio per Mac infatti non è altro che una versione aggiornata e migliorata di Xamarin Studio.

Lavorando poi su un ambiente che non è Windows è facile immaginare che sviluppare app  WPF, Windows Forms, UWP o altro non è non sarà possibile (a meno di non avere un emulatore completo di windows disponibile su Mac)

Spero di aver fatto un pò di chiarezza, se avete qualche altro dubbio in merito non esiste a scrivermi nei commenti

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

Slide Xamarin Forms

Ringrazio i cugini di DomusDotNet che mi hanno dato la possibilità di partecipare come speaker al loro evento su Xamarin.

E’ stata una giornata molto interessante in cui oltre a poter condividere ho anche potuto apprendere molte cose interessanti e naturalmente godere come sempre dell’ottimo clima community

Di seguito potete trovare le slide della mia sessione su Xamarin Forms, naturalmente potete contattarmi per qualsiasi dubbio

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

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