mercoledì 31 luglio 2013

[WP7] Path to BitmapImage

Codice per ottere una BitmapImage a partire da un path.

public static BitmapImage ImageFromPath(string path)
{
    Uri imgUri = new Uri(path, UriKind.Relative);
    StreamResourceInfo imageResource = Application.GetResourceStream(imgUri);
    BitmapImage image = new BitmapImage();
    image.SetSource(imageResource.Stream);
    return image;
}

Il path dovrà essere così composto: <NomeProgetto>;component/Path/NomeImmage

lunedì 29 luglio 2013

Ottenere IP Locale

IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
 
string mioIP = host.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork).ToString();

sabato 27 luglio 2013

[WPF-SL-Win8] Modern UI (Metro) Charts per Windows 8, WPF, Silverlight

Progetto open source che ci pemette di creare dei grafici in stile metro nella applicazione per Windows 8, WPF e Silverlight.

Grafici disponibili

  • ColumnChart (ClusteredColumnChart, StackedColumnChart, StackedColumnChart100Percent)
  • PieChart (PieChart and Dognut)
  • BarChart (ClusteredBarChart, StackedBarChart, StackedBarChart100Percent)
  • Doughnut Chart
  • Radial Gauge Chart
E' possibile visualizzare un esempio in Silverlight al seguente link

Sito ufficiale

giovedì 25 luglio 2013

[WP7 - WP8] CarGest (Beta)

Vi segnalo un'app in versione beta: CarGest (per gestire tutte, o quasi, le spese delle vostre auto).


Funzionalità:

  1. Anagrafiche: Tipi rifornimento, Veicoli, Categorie manutenzione, Categorie uscita
  2. Rifornimenti
  3. Manutenzioni
  4. Uscite
  5. Backup/Restore tramite SkyDrive

Link allo store

Mandate una mail a ken_1986@hotmail.it per essere abilitati al download

mercoledì 24 luglio 2013

Programmazione asincrona con Async ed Await in C# 4.5

Piccolo esempio sulla programmazione asincrona con le nuove parole chiave del .Net Framework 4.5: async ed await.

C#

public partial class MainWindow : Window
{
    private int Compute()
    {
        int somma = 0;
        for (int i = 0i < 10000i++)
        {
            somma += i;
            Console.WriteLine(i);
        }
 
        return somma;
    }
 
    private Task<int> ComputeAsync()
    {
        return Task.Run(() => Compute());
    }
 
    public MainWindow()
    {
        InitializeComponent();
    }
 
    private void btnCompute_Click(object senderRoutedEventArgs e)
    {
        Console.WriteLine("Elaborazione in corso...");
        int somma = Compute();
        Console.WriteLine("Elaborazione terminata: " + somma);
    }
 
    private async void btnComputeAsync_Click(object senderRoutedEventArgs e)
    {
        Console.WriteLine("Elaborazione async in corso...");
        int somma = await ComputeAsync();
        Console.WriteLine("Elaborazione async terminata: " + somma);
    }
}

 

XAML

<Window x:Class="TestWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Async/Await C# 4.5" Height="184.831" Width="346.723">
    <Grid>
        <Button Content="Compute" HorizontalAlignment="Left" Margin="38,53,0,0" VerticalAlignment="Top" Width="97" Name="btnCompute" Click="btnCompute_Click"/>
        <Button Content="Compute async" HorizontalAlignment="Left" Margin="171,53,0,0" VerticalAlignment="Top" Width="97" Name="btnComputeAsync" Click="btnComputeAsync_Click"/>
    </Grid>
</Window>

Nell'esempio abbiamo i due metodi:
  • Compute(): metodo sincrono
  • ComputeAsync(): metodo asincrono (per convezione un metodo asincrono termina col suffisso Async), che restituisce un tipo Task<TResult> (Task<int> nel nostro caso). Se il metodo asincrono non deve ritornare nessun tipo basta mettere solo Task.
Il metodo che richiama ComputeAsync() è contrassegnato dalla parola chiave async ed attende il suo terminamento mediante await.

Per approfondire l'argomento vi rimando al sito ufficiale dell'MSDN

martedì 23 luglio 2013

Testare se una collection è nulla o vuota (IsNullOrEmpty)

Metodo esteso che consente di testare se una collection è nulla o vuota (IsNullOrEmpty).

public static bool IsNullOrEmpty<T>(this Collection<T> collection)
{
    return collection == null || (collection != null && collection.Count() == 0);
}

lunedì 22 luglio 2013

[Kinect] Leggere la lingua dei segni

Mediante la kinect è possibile leggere la lingua dei segni (la lingua dei segni è una lingua che veicola i propri significati attraverso un sistema codificato di segni delle mani, espressioni del viso e movimenti del corpo. Fonte: Wikipedia).




Sito ufficiale

[WPF] Command

I Command vengono utilizzati per evitare di assegnare un determinato comportamento direttamente al controllo e per riutilizzare semplicemente le funzionalità di un'applicazione.
Esempio su come utilizzarli:

C#

public MainWindow()
{
    InitializeComponent();
}
 
private void Comando_CanExecute(object senderCanExecuteRoutedEventArgs e)
{
    //Condizione per determinare se eseguire o meno il comando
    e.CanExecute = textBox1.Text == "ok";
    e.Handled = true;
}
 
private void Comando_Execute(object senderExecutedRoutedEventArgs e)
{
    e.Handled = true;
    MessageBox.Show("Command in WPF");
}

XMAL

<Window x:Class="TestWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Command in WPF" Height="184.831" Width="346.723">
    <Window.Resources>
        <RoutedUICommand x:Key="Comando" />
    </Window.Resources>
    <Window.CommandBindings>
        <CommandBinding Command="{StaticResource Comando}" CanExecute="Comando_CanExecute" Executed="Comando_Execute" />
    </Window.CommandBindings>
    <Grid>
        <TextBox HorizontalAlignment="Left" Height="23" Margin="10,23,0,0" TextWrapping="Wrap" Name="textBox1" VerticalAlignment="Top" Width="120"/>
        <Button Content="Button" HorizontalAlignment="Left" Margin="149,23,0,0" VerticalAlignment="Top" Width="75" Command="{StaticResource Comando}"/>
    </Grid>
</Window>


venerdì 19 luglio 2013

[WP7] Leggere coordinate GPS

Leggere le coordinate GPS da un dispositivo Windows Phone 7.

using (var watcher = new GeoCoordinateWatcher())
{
    if (watcher.Permission == GeoPositionPermission.Granted)
    {
        watcher.TryStart(falseTimeSpan.FromSeconds(2));
 
        if (!watcher.Position.Location.IsUnknown)
        {
            latitudine = watcher.Position.Location.Latitude;
            longitudine = watcher.Position.Location.Longitude;
        }
 
        watcher.Stop();
    }
    else
    {
        MessageBox.Show("Non si dispone dei permessi");
    }
}

giovedì 18 luglio 2013

Modern UI Icons

Modern UI Icons è una raccolta di icone per applicazioni in stile Metro tutte realizzate mediante Expression Design.


Il pacchetto include:
  • Icone
  • Sorgenti per Expression Design
  • Icone per App Bar Windows Phone nel formato 76x76 pixel
  • Vettoriali XAML & SVG
Sito ufficiale





martedì 16 luglio 2013

[WPF] ContextMenu DataGridRow

Ecco come creare un ContextMenu per DataGridRow:

<DataGrid>
    <DataGrid.RowStyle>
        <Style TargetType="{x:Type DataGridRow}">
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Header="Nuovo" VCommand="{StaticResource nuovo}">
                            <MenuItem.Icon>
                                <Image Source="/Images/nuovo.png" Height="24"/>
                            </MenuItem.Icon>
                        </MenuItem>
                        <MenuItem Header="Elimina" Command="{StaticResource elimina}">
                            <MenuItem.Icon>
                                <Image Source="/Images/elimina.png" Height="24"/>
                            </MenuItem.Icon>
                        </MenuItem>
                    </ContextMenu>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

sabato 13 luglio 2013

[Kinect] Tracciare gli occhi

E' possibile tracciare gli occhi e calcolare la distanze fra le pupille grazie al progetto (open source) Eye tracking with Kinect for Windows.

Prerequisiti

Copiare FaceTrackData.dll e FaceTrackLib.dll nella cartella dell'eseguibile.
Le dll sono collocate in: C:\Program Files\Microsoft SDKs\Kinect\Developer Toolkit v1.7.0\Redist\x86

Sito ufficiale

mercoledì 10 luglio 2013

[Silverlight + WCF] Chiamata Cross Domain

Non è consentito effettuare da Silverlight (per questioni di sicurezza) chiamate remote cross dominio, a meno che il servizio non espone il file clientaccesspolicy.xaml.
Per ovviare a ciò non ci resta che creare il file clientaccesspolicy.xml nella root progetto WCF:

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="SOAPAction">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy> 
Errore visualizzato:

Errore durante il tentativo di effettuare una richiesta all'URI xxxx. Ciò può essere dovuto al tentativo di accesso a un servizio in modalità di interdominio senza disporre di criteri di interdominio appropriati o con criteri non adatti ai servizi SOAP. Potrebbe essere necessario contattare il proprietario del servizio per pubblicare un file di criteri di interdominio e verificare che consenta l'invio di intestazioni HTTP correlate a SOAP. Questo errore potrebbe essere anche dovuto all'utilizzo di tipi interni nel proxy del servizio web senza utilizzare l'attributo InternalsVisibleToAttribute. Per ulteriori informazioni, vedere l'eccezione interna.

martedì 9 luglio 2013

[WPF] Modern UI for WPF

Modern UI for WPF è un insieme di controlli e stili (open source) che ci consente di creare delle interfacce grafiche in stile Metro.

Elenco delle funzionalità:

  • Temi dark, ligh e personalizzabili (configurabile a runtime)
  • Controlli
    • BBCodeBlock
    • ModernButton
    • ModernDialog
    • ModernFrame
    • ModernMenu
    • ModernTab
    • ModernWindow
    • RelativeAnimatingContentControl
    • TransitioningContentControl
  • Layout
  • Stili controlli
  • Template di progetto (Visual Studio 2012)
Sito ufficiale

lunedì 8 luglio 2013

[PostgreSQL] Il tipo Geometry e ST_GeomFromText()

Esempio di utilizzi del tipo Geometry richiamando la funzione ST_GeomFromText().
using (NpgsqlConnection connection = new NpgsqlConnection(stringaConnessione))
{
    connection.Open();
 
    using (NpgsqlCommand cmd = new NpgsqlCommand("INSERT INTO miaTabella (campoTipoGeomtry) VALUE(st_geometryfromtext('POINT(' || @lon || ' ' || @lat ||')',4326))"connection))
    {
        cmd.Parameters.AddWithValue("@lat"latitudine);
        cmd.Parameters.AddWithValue("@lon"longitudine);
        cmd.ExecuteNonQuery();
    }
    connection.Close();
 }

[SqlServer] Reset colonna di tipo Identity

Query per resettarecolonna di tipo Identity:

DBCC CHECKIDENT('nomeTabella', RESEED, 0)

sabato 6 luglio 2013

[WPF] Extended WPF Toolkit

Extended WPF Toolkit è una racconta di controlli da utilizzare nei progetti WPF.


Versioni disponibili:
La versione Open Source (2.0) include i seguenti controlli:
  • AvalonDock 
  • AutoSelectTextBox
  • BusyIndicator
  • ButtonSpinner
  • Calculator
  • CalculatorUpDown
  • CheckComboBox
  • CheckListBox
  • ChildWindow
  • CollectionEditor
  • DataGrid
  • CollectionControlDialog
  • ColorCanvas
  • ColorPicker
  • DateTimePicker
  • DateTimeUpDown
  • DecimalUpDown
  • DoubleUpDown
  • DropDownButton
  • IntegerUpDown
  • Magnifier
  • MaskedTextBox
  • MessageBox
  • MultiLineTextEditor
  • Pie
  • PrimitiveTypeCollEditor
  • PropertyGrid
  • RichTextBox
  • RichTextBoxFormatBar
  • SplitButton
  • Panels/Layouts
    • SwitchPanel
    • WrapPanel
    • RandomPanel
  • TimelinePanel
  • TimePicker
  • WatermarkTextBox
  • WindowContainer
  • WindowControl
  • Windows 8 Theme
  • Wizard
  • Zoombox
Sito ufficiale

giovedì 4 luglio 2013

[WPF - SL] Interfaccia multi-finestre con FloatingWindow

FloatingWindow è un'insieme di librerie che permette di creare delle interfacce multi-finestre (multi-windows interface).


E' disponibile sia per WPF che per Silverlight.

  • Struttura

Gli elementi principali presenti nel progetto sono:
  1. FloatingWindow: Classe di base della finestra ridimensionabile (resizable windows)
  2. FloatingWindowHost: Elemento canvas che contiene le varie FloatinWindo
  3. Iconbar: Pannelo contenente le icone della finestra
  4. Bootstrap Button: pulsante di apertura/chiusura dell'IconBar
  5. Bottom Bar: controllo che può hostare altri tipi di controlli
  •  Utilizzo

L'utilizzo è estremamente semplice. Basta creare il "contenitore" di tipo FloatingWindowHost e inserire le varie FloatingWindow.

Creazione FloatingWindowHost da XAML
<my:FloatingWindowHost x:Name="host"
    SnapinEnabled="True" ShowMinimizedOnlyInIconbar="False">
</my:FloatingWindowHost>


Creazione FloatingWindow da C#
FloatingWindow window = new FloatingWindow();
window.Title = "New window";
host.Add(window);
window.Show();


Creazione FloatingWindow da XAML
<my:FloatingWindow x:Class="FloatingWindowControl.DetailsForm"
    xmlns:my="clr-namespace:SilverFlow.Controls;assembly=SilverFlow.Controls"
    Height="Auto" MinWidth="100" MinHeight="100"
    Title="Details" IconText="Details Form" Tag="Details">

mercoledì 3 luglio 2013

[Kinect] Candescent NUI

Candescent NUI consente di tracciare mani e dita mediante il flusso di profondità (depth stream) della Kinect.
Supporta sia OpenNI che Microsoft Kinect SDK.




Sito ufficiale: https://candescentnui.codeplex.com/
Blog: http://blog.candescent.ch/

martedì 2 luglio 2013

[Kinect] Kinect Toolbox

Kinect Toolbox raccoglie un insieme di strumenti per sviluppare con l'SDK della Microsoft.


Elenco delle funzionalita:
  • Gesture
    • SwipeGestureDetector: rileva le seguenti gesture
      1. SwipeToLeft
      2. SwipeToRight
    • TemplatedGestureDetector: è possibile registrare le gesture ed utilizzarle in un secondo momento. Utilizzando questa classe, è possibile rilevare ogni tipo di gesture in 2D
  • Postures
    • AlgorithmicPostureDetector: è possibile rilevare le seguenti posture
      1. None
      2. HandsJoined
      3. LeftHandOverHead
      4. RightHandOverHead
      5. LeftHello
      6. RightHello
    • TemplatedPostureDetector: come per il TemplatedGestureDetector è possibile registrare le posture ed utilizzarle in un secondo momento. Utilizzando questa classe, è possibile rilevare ogni tipo di postura in 2D
  • Skeleton Stability
    • BarycenterHelper: indica se lo scheletro è fermo oppure in movimento
  • Drawing
    • SkeletonDisplayManager: disegna lo scheletro su un canvas WPF
    • GestureDetectors: disegna le posizioni registrate su un canvas WPF
  • Skeleton Record & Replay
    • Insieme di classi che consentono di registrare e riprodurre le sessioni con la kinect.
  • Streams
    •  ColorStreamManager e DepthStreamManager: consentono di disegnare il contenuto dei flussi Color e Depth
  • Voice Commander
    •  Voice Commander: permette di utilizzare una lista di parole e di scatenare degli eventi quando una di essa viene rilevata
  • Misc.
    • BIndableNUICamera:  possibilità di effettuare il binding fra l'angolo verticale (elevation angle) della kinect ed un controllo (ad esempio uno slider) di un'applicazione WPF
  • Context tracking
    • ContextTracker: rileva la stabilità dell'utente (quindi se è possibile rilevare o meno le gustures)
    • EyeTracker: permette di stabilire se l'utente sta guardando il sensore (utilizza il sistema di Face tracking presente dalla versione 1.5 in poi)
  • Combined gestures
    • Grazie a ParallelCombinedGestureDetector e SerialCombinedGestureDetector è possibile comporre delle gesture in maniera parallela o seriale
  • PresenceControl control
    • E' un controllo WPF in grado di fornire un feedback visuale per l'utente, visualizzando le mani al di sopra del flusso di profondità (depth stream).
Sito ufficiale

NuGet

NuGet è un gestore di pacchetti (open source) per la piattaforma .NET. Il client ci consente di creare e/o utilizzare i pacchetti.
Il repository (NuGet Gallery) si trova al seguente indirizzo http://nuget.org/

 
Link utili:
NuGet Gallery: http://nuget.org/
Documentazione: http://docs.nuget.org
Blog: http://blog.nuget.org