Sunteți pe pagina 1din 33

Curs 1

Introducere în .NET, WPF, XAML

Lect. dr. Florina Covaci


Obiective
• Deprinderea principalelor concepte ale programării în .NET
Framework 4.8 și .NET Core 3.1
• Programarea aplicatiilor Windows utilizand WPF
• Programarea aplicatiilor Web utilizand ASP.NET Core
• Programarea aplicatiilor mobile utilizand Xamarin.Forms
• Programarea accesului la date

Echipa:
• Lect. Dr. Florina Covaci, Asist. Dr. Paula Zalhan

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Bibliografie

Andrew Troelsen, Philip Japikse - Pro C# 7 with .NET and .NET Core
Christian Nagel - Professional C# 7 and .NET Core 2.0

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Evaluare
• Probă teoretică: 40%
• Examen scris în sesiune

• Proiect individual: 40%


• Examinat prin sustinere în sesiune

• Promovare examen: minim 5 la fiecare probă de examen

• Activitate 20% - efectuare laboratoare si incarcare pe Github

MEDII DE PROGRAMARE ȘI DEZVOLTARE


De ce VS și C#?

https://insights.stackoverflow.com/survey/2020
MEDII DE PROGRAMARE ȘI DEZVOLTARE
Istoria .NET (I)
• 2002 .NET framework 1.0 – C# 1.0
• C# 1.0 un nou limbaj de programare dezvoltat pentru .NET
framework - Anders Hejlsberg
• .NET framework continea 3000 de clase la momentul cand a
fost creat

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Istoria .NET (II)
• 2005 .NET framework 2 - C# 2
• Generics – crearea de parametrii generici fara a se declara tipul
acestora

• 2005 .NET framework 3


• WPF , WCF, WF – noi librarii

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Istoria .NET (III)
• 2008 .NET 3.5 - C# 3
LINQ -interogari folosind aceeasi sintaxa pentru colectii de obiecte,
baze de date si fisiere XML
• 2010 .NET 4 - C# 4
facilitati noi pentru programare paralela
• 2012 .NET 4.5 - C#5
programare asincrona – device-uri cu touch screen

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Istoria .NET (IV)
• 2015 C#6 and .NET core 1.0
runtime distribuit cu fiecare aplicatie, open source, multi-platforma
• 2017 C#7 and .net core 2.0
noi facilitati pentru programarea functionala
• 2019 C#8 and .Net core 3.0
îmbunatatiri pentru programarea functionala si asincrona

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Tehnologii curente .NET

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Aplicatii de tip Desktop

• Aplicația nu are nevoie de conexiune la internet


• O mai buna interactiune cu utilizatorul
• Aplicatiile desktop pot oferi o performanță mai buna decât aplicațiile
web
• Desi e posibila rularea de algoritmi complecsi in partea de client a
aplicatilor web, acest lucru se realizeaza cu dificultate
• Utilizarea firelor de execuție este mai facila în aplicațiile Desktop

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Clasa, Namespace, Assembly

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Windows Presentation Foundation & XAML
• WPF oferă posibilitatea de a separa interfata de logica de programare
• Interfata este definita folosind XAML markup iar apoi acest markup
poate fi conectat la un fisier cu cod C# (code-behind) pentru a furniza
funcționalitatea interfeței
• XAML permite definire de elemente simple (butoane, griduri,liste,
etc.) dar și grafică interactivă 2D și 3D, animații, functionalitati
multimedia (rulare video)

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Namespace-ul System.Windows
• Este namespace-ul principal al WPF

• Contine două din clasele principale folosite în orice proiect WPF


• Application
• Window

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Clasa Application
• App.xaml.cs

• Obiect din clasa Application - o instanță a unei aplicații WPF care


rulează

• Furnizează:
• metoda Run() pentru a porni aplicația

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Proprietati ale clasei Application

• StartupUri – setează sau furnizează valoarea pentru un URI care specifică fereastra care se
deschide automat când o aplicație pornește
• Current –permite accesul din orice parte a aplicatiei la obiectul aplicație care rulează
• Windows – asigură acces la o colecție care reprezintă ferestrele din memorie pentru
aplicația WPF curentă. Pe masură ce se crează noi obiecte de tip fereastră, ele sunt
adaugate in colectia Application.Windows

static void MinimizeAllWindows()


{
foreach (Window wnd in Application.Current.Windows)
{
wnd.WindowState = WindowState.Minimized;
}
}

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Clasa Window
• Un obiect din clasa System.Windows.Window reprezintă o fereastră
deținută de obiectul din clasa Application (derivată)

• System.Windows.Controls.ContentControl – poate găzdui o singură


piesă de conținut, care se referă la datele vizuale plasate în interiorul
suprefeței controlului prin intermediul proprietății Content

<Button Height="80" Width="100" Content="OK"/>

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Conținut complex
• Conținut în interiorul elementului
<Button Height="80" Width="100">
<StackPanel>
<Ellipse Fill="Red" Width="25" Height="25"/>
<Label Content ="OK!"/>
</StackPanel>
</Button>

• Conținut specificat prin proprietatea elementului


<Button Height="80" Width="100">
<Button.Content>
<StackPanel>
<Ellipse Fill="Red" Width="25" Height="25"/>
<Label Content ="OK!"/>
</StackPanel>
</Button.Content>
</Button>

MEDII DE PROGRAMARE ȘI DEZVOLTARE


System.Windows.Controls.Control
• Toate controalele WPF mostenesc clasa de bază Control

• Furnizează proprietățile de bază :


• marimea elementului,
• opacitate,
• ordinea de accesare a controalelor,
• culoare fundal
• etc.

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Namespaces și cuvinte cheie XAML
• Elementul rădăcină a unui document WPF XAML (<Window>, <Page>,
<UserControl>,<Application>) conține referințe către urmatoarele
două namespace-uri predefinite:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
</Grid>
</Window>

MEDII DE PROGRAMARE ȘI DEZVOLTARE


XML Namespaces
• http://schemas.microsoft.com/winfx/2006/xaml/presentation mapează System.Windows,
System.Windows.Controls, System.Windows.Data, System.Windows.Ink, System.Windows.Media,
System.Windows.Navigation, etc.
• http://schemas.microsoft.com/winfx/2006/xaml este utilizat pentru a include cuvinte cheie XAML
• Regula: elementul rădăcină specifică un namespace XML ca fiind namespace-ul primar , fiind cel
din care se utilizează cele mai multe elemente. Dacă este necesar[ includerea unor alte
namespace-uri secundare, acestea trebuie definite utilizând un prefix (prin convenție acest prefix
este de obicei x, dar poate fi orice prefix (de ex. XamlSpecificStuff)
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:XamlSpecificStuff="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
</Grid>
</Window>

MEDII DE PROGRAMARE ȘI DEZVOLTARE


XML Namespaces
• Descrierea unei clase .NET dintr-un assembly extern
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:myCtrls="clr-namespace:MyControls;assembly=MyControls"
Title="MainWindow" Height="350" Width="525">
<Grid>
<myCtrls:MyCustomControl />
</Grid>
</Window>

xmlns:myCtrls="clr-namespace:SomeNamespaceInMyApp" - clasa se află în


acelasi assembly, dar în alt namespace
MEDII DE PROGRAMARE ȘI DEZVOLTARE
XAML: Elemente, Atribute și Convertori de tip
<Window public void MakeAButton()
xmlns="http://schemas.microsoft.com/winf
x/2006/xaml/presentation" {
xmlns:x="http://schemas.microsoft.com/wi Button myBtn = new Button();
nfx/2006/xaml">
<Grid> myBtn.Height = 50;
<Button Height="50" Width="100" myBtn.Width = 100;
Content="OK!"
FontSize="20" Background="Green" myBtn.FontSize = 20;
Foreground="Yellow"/> myBtn.Content = "OK!";
</Grid>
</Window> myBtn.Background = new
SolidColorBrush(Colors.Green);
myBtn.Foreground = new
SolidColorBrush(Colors.Yellow);
}
XAML – valori complexe pentru atribute

Property element syntax


public void MakeAButton() <Button Height="50" Width="100"
{ Content="OK!"
... FontSize="20" Foreground="Yellow">
// A fancy brush for the background. <Button.Background>
LinearGradientBrush fancyBruch = <LinearGradientBrush>
new <GradientStop Color="DarkGreen"
LinearGradientBrush(Colors.DarkGreen, Offset="0"/>
Colors.LightGreen, 45); <GradientStop Color="LightGreen"
myBtn.Background = fancyBruch; Offset="1"/>
myBtn.Foreground = new </LinearGradientBrush>
SolidColorBrush(Colors.Yellow); </Button.Background>
} </Button>

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Property element syntax
<DefiningClass>
<DefiningClass.PropertyOnDefiningClass>
<!-- Value for Property here! -->
</DefiningClass.PropertyOnDefiningClass>
</DefiningClass>
• ----------------------------------
<Button Height="50" Content="OK! " FontSize="20" Foreground="Yellow">
...
<Button.Width>
100
</Button.Width>
</Button>

MEDII DE PROGRAMARE ȘI DEZVOLTARE


XAML Attached properties
• Permit unui element copil sa seteze valoarea pentru o proprietate
care este definita intr-un element parinte – pozitionare elemente UI
într-unul din managerii de layout (Grid, DockPanel, etc.)
<ParentElement>
<ChildElement ParentElement.PropertyOnParent = "Value">
</ParentElement>

<Canvas Height="200" Width="200" Background="LightBlue">


<Ellipse Canvas.Top="40" Canvas.Left="40" Height="20" Width="20" Fill="DarkBlue"/>
</Canvas>

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Fișierul App.xaml
• ferestra cu care pornește aplicatia StartupUri
<Application x:Class="WpfTesterApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentat
ion"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfTesterApp"
StartupUri="MainWindow.xaml" Startup="App_OnStartup"
Exit="App_OnExit" >
<Application.Resources>
</Application.Resources>
</Application>

MEDII DE PROGRAMARE ȘI DEZVOLTARE


App.xaml.cs
public partial class App : Application
{
private void App_OnStartup(object sender, StartupEventArgs e)
{
}
private void App_OnExit(object sender, ExitEventArgs e)
{
}
}

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Main()
• App.g.cs
public static void Main() {
WpfTesterApp.App app = new WpfTesterApp.App();
app.InitializeComponent();
app.Run();
}

public void InitializeComponent() {


this.Startup += new System.Windows.StartupEventHandler(this.App_OnStartup);
this.Exit += new System.Windows.ExitEventHandler(this.App_OnExit);
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
}

MEDII DE PROGRAMARE ȘI DEZVOLTARE


WPF Styles
• Aspect unitar al controalelor dintr-o aplicatie – inaltime, latime, culoare de
background, culoare font etc.
• Un stil – un obiect care mentine o colectie de perechi de tipul proprietate-
valoare
• Descris ca o resursa la nivel de aplicatie in App.xaml
• Clasa System.Windows.Style – proprietatea Setters
• Triggers – permite captarea diverselor evenimente pentru a conditiona
aplicarea unor stiluri
• BasedOn – permite costruirea unui nou stil pe baza unui stil existent
• TargetType – permite aplicarea unor constrangeri care defnesc unde se
aplica stilul

MEDII DE PROGRAMARE ȘI DEZVOLTARE


TargetType
• <Style x:Key ="BigGreenButton" TargetType="Button">
• <Setter Property = "FontSize" Value ="20"/>
• <Setter Property = "Height" Value = "100"/>
• <Setter Property = "Width" Value = "100"/>
• <Setter Property = "Background" Value = "DarkGreen"/>
• <Setter Property = "Foreground" Value = "Yellow"/>
• </Style>

MEDII DE PROGRAMARE ȘI DEZVOLTARE


BasedOn
• <Style x:Key ="TiltButton" TargetType="Button" BasedOn =
"{StaticResource BigGreenButton}">
• <Setter Property = "Foreground" Value = "White"/>
• <Setter Property = "RenderTransform">
• <Setter.Value>
• <RotateTransform Angle = "20"/>
• </Setter.Value>
• </Setter>
• </Style>

MEDII DE PROGRAMARE ȘI DEZVOLTARE


Triggers
• <Style x:Key = "GrowingButtonStyle" • <DoubleAnimation From = "40" To =
TargetType="Button"> "200"
• <Setter Property = "Height" Value = • Duration = "0:0:2"
"40"/> AutoReverse="True"/>
• <Setter Property = "Width" Value = • </Storyboard>
"100"/> • </BeginStoryboard>
• <Style.Triggers> • </Trigger.EnterActions>
• <Trigger Property = "IsMouseOver" • </Trigger>
Value = "True">
• <Trigger.EnterActions> • </Style.Triggers>
• <BeginStoryboard> • </Style>
• <Storyboard TargetProperty =
"Height">

MEDII DE PROGRAMARE ȘI DEZVOLTARE

S-ar putea să vă placă și