Convertitore di Misure in C# – #1 – Introduzione a WPF

Convertitore di misure in C# - #1 - Introduzione a WPF

Convertitore di Misure in C# – #1 – Introduzione a WPF: Progetto per introdurre all’utilizzo di WPF per lo sviluppo di applicazioni Desktop per Windows in C#.

Tempo di lettura stimato: 3 minuti

Convertitore di Misure in C# – #1 – Introduzione a WPF

WPF (Windows Presentation Foundation) è un insieme di librerie utilizzate per lo sviluppo di interfacce grafice per software sviluppati in ambiente .NET.

WPF si contrappone a WinForms che per tanti anni è stato l’unico metodo di creazione per l’interfaccia grafica.

WPF crea elementi in vettoriale, quindi a differenza di WinForms ogni elemento è facilmente scalabile e sfrutta a pieno la scheda grafica del PC, andando quindi a pesare meno su CPU e Ram.

L’interfaccia grafica in WPF è gestita tramite il linguaggio di markup xaml.

E’ possibile modificare le propietà conme in WinForms direttamente dalla scheda proprietà, ma si ottiene il massimo scrivendo direttamente il codice in xaml.

Il progetto – Convertitore di misure

Per il tutorial su WPF vedremo come creare un software per convertire diverse unità di misura.

La scelta di un software semplice (forse anche troppo) ci permette di concentrarci esclusivamente su WPF e su xaml.

Nel corso del tutorial che potete trovare a fine articolo (o sul canale Youtube) andremo a creare la struttura iniziale del software.

Per cominciare quindi, andiamo ad inserire un TabControl per separare i diversi convertitori.

Vedremo quindi come modificare le proprietà sia dalla finestra delle proprietà che direttamente in codice xaml.

Codice xaml

<Window x:Class="PocketConverter.MainWindow"
        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:local="clr-namespace:PocketConverter"
        mc:Ignorable="d"
        Title="Pocket Converter" Height="450" Width="800" Loaded="Window_Loaded">
    <Grid>
        <TabControl TabStripPlacement="Left" FontSize="18">
            <TabItem Header="Lunghezza">
                <Grid Background="White" >
                    <Label x:Name="label_Origine" Content="Origine:" HorizontalAlignment="Left" Margin="75,85,0,0" VerticalAlignment="Top"/>
                    <Label x:Name="label_Destinazione" Content="Destinazione:" HorizontalAlignment="Left" Margin="75,0,0,0" VerticalAlignment="Center" Foreground="#FFD41717" BorderBrush="#FFBBAC07"/>
                    <TextBox x:Name="txt_Origine" HorizontalAlignment="Left" Margin="208,89,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
                    <TextBox x:Name="txt_Destinazione" HorizontalAlignment="Left" Margin="208,0,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Center" Width="120" BorderBrush="#FF0040FF"/>
                    <Button x:Name="btn_Converti" Content="Converti" HorizontalAlignment="Left" Margin="208,159,0,0" VerticalAlignment="Top" Width="236" Click="btn_Converti_Click"/>
                    <ComboBox x:Name="cmb_Origine" HorizontalAlignment="Left" Margin="371,87,0,0" VerticalAlignment="Top" Width="205" DropDownClosed="cmb_Origine_DropDownClosed">
                        <ComboBoxItem x:Name="cmbOrigineKm"  Content="Chilometro"/>
                        <ComboBoxItem x:Name="cmbOrigineM" Content="Metro"/>
                        <ComboBoxItem x:Name="cmbOrigineDm" Content="Decimetro"/>
                        <ComboBoxItem x:Name="cmbOrigineCm" Content="Centimetro"/>
                        <ComboBoxItem x:Name="cmbOrigineMm" Content="Millimetro"/>
                    </ComboBox>
                    <ComboBox x:Name="cmb_Destinazione" HorizontalAlignment="Left" Margin="371,201,0,0" VerticalAlignment="Top" Width="205" BorderBrush="Red">
                        <ComboBoxItem x:Name="cmbDestinazioneKm" Content="Chilometro"/>
                        <ComboBoxItem x:Name="cmbDestinazioneM" Content="Metro"/>
                        <ComboBoxItem x:Name="cmbDestinazioneDm" Content="Decimetro"/>
                        <ComboBoxItem x:Name="cmbDestinazioneCm" Content="Centimetro"/>
                        <ComboBoxItem x:Name="cmbDestinazioneMm" Content="Millimetro" />
                    </ComboBox>
                </Grid>
            </TabItem>
            <TabItem Header="Peso">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem Header="Temperatura">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
        </TabControl>
    </Grid>
</Window>

Codice C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace PocketConverter
{
    /// <summary>
    /// Logica di interazione per MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            cmb_Origine.SelectedIndex = 1;
            cmb_Destinazione.SelectedIndex = 3;
            cmbDestinazioneM.IsEnabled = false;
            txt_Origine.Text = "0";
            txt_Destinazione.Text = "0";
        }

        private void btn_Converti_Click(object sender, RoutedEventArgs e)
        {
            
        }

        private void cmb_Origine_DropDownClosed(object sender, EventArgs e)
        {
            cmbDestinazioneKm.IsEnabled = true;
            cmbDestinazioneM.IsEnabled = true;
            cmbDestinazioneDm.IsEnabled = true;
            cmbDestinazioneCm.IsEnabled = true;
            cmbDestinazioneMm.IsEnabled = true;

            if (cmb_Origine.SelectedIndex == 0)
            {
                cmbDestinazioneKm.IsEnabled = false;
            }
            else if (cmb_Origine.SelectedIndex == 1)
            {
                cmbDestinazioneM.IsEnabled = false;
            }
            else if (cmb_Origine.SelectedIndex == 2)
            {
                cmbDestinazioneDm.IsEnabled = false;
            }
            else if (cmb_Origine.SelectedIndex == 3)
            {
                cmbDestinazioneCm.IsEnabled = false;
            }
            else if (cmb_Origine.SelectedIndex == 4)
            {
                cmbDestinazioneMm.IsEnabled = false;
            }

        }
    }
}

Video

Il video mostra il tutorial completo per lo sviluppo di un’applicazione Desktop in C# utilizzando WPF.