Transizione da Windows Forms a WPF


113

Per molto tempo sono rimasto bloccato con lo sviluppo di Windows Form (iniziato con VB6 e ha continuato fino a C # .NET 4.5), e ho praticamente raggiunto il limite di ciò che Windows Form può fare, entrambi utilizzando .NET puro ed effetti speciali con Native Code.

Ho provato a imparare WPF e XAML, ma rimango bloccato nel nuovo designer di WPF. Sembra davvero molto difficile da usare rispetto al designer Windows Forms.

Voglio sapere se ci sono alternative alla finestra di progettazione WPF di .NET, più adatte agli sviluppatori Windows Forms?


7
Di solito non uso nemmeno il designer, salvo per controllare se il layout generale è quello che mi aspetterei; alla fine scrivo tutto a mano in XAML e / o uso Blend quando necessario, anche se non sono un designer, quindi non succede quasi mai.
Patryk Ćwiek

Puoi usare Expression blend, ma non penso che sia davvero più facile, è più per i designer che per gli sviluppatori IMO. Normalmente spengo semplicemente l'anteprima e lavoro con xml.
BlackICE

5
Non è difficile da usare, semplicemente non ci sei abituato. Il più grande ostacolo da superare è il cambio di paradigma tra le due tecnologie. Procurati un buon libro su XAML, una volta che ti sarai abituato a XAML non utilizzerai nemmeno più il designer: digiterai XAML direttamente.
slugster

3
@slugster, me lo chiedevo. La stessa cosa è successa con HTML ... Prima costruivo l'interfaccia utente con dreamweaver, e ora codice HTML a mano
Matthew Layton

Risposte:


175

Mi piace scrivere articoli per principianti su WPF, e ce ne sono alcuni in particolare che possono aiutarti:

Per riassumere, la più grande differenza tra Winforms e WPF è che in WPF il tuo livello dati (il DataContext) è la tua applicazione, mentre in Winforms il tuo livello UI è la tua applicazione.

Per guardarla in un altro modo, con WPF la tua applicazione è composta dagli oggetti che crei e usi i modelli e altri oggetti dell'interfaccia utente per dire a WPF come disegnare i componenti dell'applicazione.

È l'opposto di WinForms in cui si crea la propria applicazione dagli oggetti dell'interfaccia utente e quindi si forniscono loro i dati necessari.

Per questo motivo, il designer non è effettivamente utilizzato molto poiché i componenti dell'applicazione sono progettati in codice e il designer è necessario solo per disegnare un'interfaccia user-friendly che rifletta le classi di dati (in genere Modelse ViewModels)

E personalmente, preferisco digitare a mano tutto il mio XAML poiché è più veloce e non crea confusione come fa il designer WPF drag / drop, anche se occasionalmente utilizzo il Designer per visualizzare in anteprima l'aspetto della mia interfaccia utente piace.

Quindi, alla tua risposta alla tua domanda se ci sono altri designer WPF adatti per gli sviluppatori WinForms, suggerirei che invece di cercare un altro designer, cerca invece di imparare a usare WPF nel modo in cui dovrebbe essere usato. Usare WPF come se fosse WinForms significa perdere gran parte di ciò che lo rende così eccezionale :)


14
Totalmente d'accordo con @Rachel. La realizzazione più importante quando si entra nella luce di WPF è capire che l' interfaccia utente non è dati e agire di conseguenza.
Federico Berasategui

2
@ Rachel - solo per interpretare l'avvocato del diavolo: iniziare con l'interfaccia utente (quali pulsanti, caselle di testo ecc. Appaiono nella finestra) aiuta a concentrare l'applicazione su ciò che vuoi fare. Il resto è solo dettagli di implementazione di come lo vuoi fare.
Asaf

3
@HighCore dai un'occhiata a stackoverflow.com/questions/982978/mvvm-for-winforms e dovrai riconoscere che Winforms è solo un componente di visualizzazione / interfaccia utente in cui gli oggetti aziendali possono essere associati ai controlli utente. OK: WPF è più adatto per MVVM, ma tuttavia Winforms può funzionare anche in un tale modello di progettazione. E come afferma Rachel "Questo è l'opposto di WinForms in cui si crea la propria applicazione a partire dagli oggetti dell'interfaccia utente e quindi si forniscono loro i dati necessari". È così falso per sebbene. Penso sempre almeno in modo dati e vista. Dati e Winforms / WPF / HTML qualunque.
Bernoulli IT

2
Supporta l'associazione dati almeno a livello di immissione / modifica dei dati. E sospetto che anche il 99,9999999% degli sviluppatori creerà problemi in WPF. Ma finiamo questa discussione. WPF è assolutamente più potente / adatto per MVVM e una separazione delle preoccupazioni, ma penso che tu e anche Rachel spingiate Winforms in un angolo negativo. Soprattutto quando continui a usare le parole che usi ...
Bernoulli IT

3
@YoupTube Hai ragione, Winforms supporta l'associazione dei dati ed è possibile creare le tue associazioni personalizzate per i casi in cui il sistema di associazione predefinito non funzionerà. Ho scritto questa risposta e gli articoli del mio blog pensando ai principianti, e in genere i principianti pensano in termini di componenti dell'interfaccia utente, non di oggetti di dati. Inoltre, l'associazione in WinForms non è sempre esistita nello stato in cui si trova ora, quindi molti sviluppatori che sono cresciuti con WinForms o che sono abituati ad altre tecnologie che non utilizzano associazioni, spesso non identificheranno questa differenza chiave durante il passaggio ad un'architettura vincolata. :)
Rachel

9

Ebbene, alcune persone non sono d'accordo, consiglierei anche di non utilizzare il designer VS. Almeno non per creare un'interfaccia. Se vuoi avere una prima impressione della tua implementazione senza avviare l'applicazione, è un buon visualizzatore almeno finché non vengono utilizzate cose sofisticate come Stylese Templates. Ma, IMHO, il suo risultato di trascinamento della selezione dovrebbe essere utilizzato solo come prototipo e quindi essere eliminato quando non è più necessario.

Ecco alcuni motivi per cui è importante non utilizzarlo.

  1. Il designer VS sta lavorando con margini fissi e allineamenti (che di solito non è necessario, se stai usando i controlli di layout), significa che devi toccare molti controlli, se i requisiti vengono modificati. Se sei approfondito in XAML e nella meccanica WPF, puoi creare applicazioni che possono essere modificate con un piccolo sforzo, per quanto riguarda l'aspetto grafico.

  2. Poiché il designer sta generando xaml, la composizione non è ottimale e l'interfaccia utente potrebbe funzionare male. Non l'ho misurato, è solo una sensazione.

Un'alternativa molto migliore è MS Blend , anche se l'inizio è tutt'altro che facile. Il risultato del trascinamento della selezione è molto migliore del risultato del designer VS.
Ma è uno strumento piuttosto potente, che ti aiuta a utilizzare elementi piuttosto potenti per creare un'interfaccia utente all'avanguardia. Consiglio di visitare almeno un breve workshop per avere un'idea delle sue opportunità.

Tornando alla tua domanda, IMHO, e penso che molte persone siano d'accordo, procurati un buon libro ad es. WPF Unleashed e più tardi, se vuoi saperne di più sui dettagli, WPF Pro . Ci sono molte funzionalità diverse da Winforms. Non li conoscerai utilizzando alcun designer. Penso che sia l'approccio migliore.

Considera anche che ci sono molti framework e librerie (ad esempio MVVM light , WPFToolkit ) là fuori, che stanno già risolvendo alcuni problemi comuni. Quindi non è necessario reinventare la ruota.


9

So che questa è una vecchia domanda, ma a beneficio di chiunque altro stia guardando questo, penso che dovrei ristabilire un po 'l'equilibrio - leggendo alcune delle altre risposte, ho la sensazione che alcune delle "non usano il designer 'il sentimento deriva dal non usarlo correttamente. Questo tutorial è abbastanza buono per farti andare e risponde ad alcune delle critiche negli altri post.

Ad esempio, puoi passare dal layout basato sui margini simile a Winforms che è l'impostazione predefinita quando rilasci un controllo, a uno stile più simile a WPF facendo clic con il pulsante destro del mouse e selezionando "Ripristina layout"

Questo video copre un terreno simile.

A conti fatti, preferisco ancora il designer VS2010 - VS2013 sembra essere un po 'buggato quando si trascina e rilascia su TabItems **, (che il mio progetto attuale usa molto) - ma la vista Struttura documento VS2013 ti consente di spostare le cose anche in quella vista , che può essere un vero vantaggio.

In realtà, però, per ottenere il massimo da WPF e xaml è necessario essere ragionevolmente fluenti sia nella vista designer che nella vista xaml e passare da una all'altra; se ti allontani dal designer, ti stai perdendo qualcosa che può aiutarti molto.

** Modifica: anche se sembra essere stato migliorato nell'aggiornamento 3 per VS 2013 e nelle anteprime di VS14, ad oggi ottengo ancora un comportamento strano a volte.


7

Prima di tutto, in WPF (XAML) in Visual Studio deisgner, dovresti sempre usare il codice xaml per costruire la tua interfaccia utente e non trascinare e rilasciare il controllo! Devi mantenere pulito il tuo codice. Puoi usare Expression Blend per aiutarti, è più orientato alla grafica con il trascinamento della selezione, ma non è gratuito.

Non è una grande curva di apprendimento, ma penso che dovresti imparare a fare il tuo xaml a mano invece di cercare un'alternativa.


1
Il drag-n-drop non fa male, anche se se preferisci digitare, va bene anche quello. La digitazione manuale non è mai la chiave per WPF.
David

3
Quando trascini e rilasci in WPF, vedo che spesso hai molto margine di -1200 e cose del genere non hanno affatto senso ... l'ho sempre fatto a mano, è sicuramente meglio
mlemay

1
Questo è fuori tema. Assicurati che il tuo problema sia comune a tutti, non solo a te stesso. Inoltre, non puoi dire che il drag-n-drop è negativo, se hai qualche problema. Affidarsi al designer è ancora necessario e talvolta favorito, potresti vedere che questo è vero, se sai come l'espressione è accolta sia dal designer che dagli sviluppatori.
David

1
sì, se usi la miscela di espressioni, ok puoi farlo, ma stavo parlando in uno studio visivo ...
mlemay

12
Penso che consigliare a qualcuno proveniente da Forms e avviare WPF di non utilizzare il designer sia una pessima idea. Il modo più veloce per comprendere XAML consiste nell'usare il trascinamento della selezione e quindi osservare il codice.
Ucodia

7

Ho passato questo processo come hai fatto tu. In seguito ho insegnato a tutti nella mia azienda WPF. Ci sono un paio di lezioni importanti che ho imparato e tutti quelli che conosco che lavorano con WPF.

  1. Se stai lavorando con i controlli dell'interfaccia utente nel codice sottostante, .... Allora lo stai facendo male. Non è assolutamente necessario che tu gestisca i controlli dell'interfaccia utente nel codice sottostante.
  2. Non è necessario lo sviluppatore visivo per fare clic su di esso. Sei molto più produttivo trattando solo con XAML. Usa Copia / Incolla. Non fidarti delle tue capacità di digitazione. Risparmierà molti mal di testa.
  3. Pensa all'XAML come a una finestra che si affaccia sui dati. Nel codice dietro di te stai cambiando i dati. In XAML stai definendo il modo in cui l'interfaccia utente interpreterà i dati.
  4. I convertitori sono fantastici. Non appena ottieni una quantità chiave di convertitori, la tua produttività salirà alle stelle. Assumeranno il ruolo della folle quantità di gestori di eventi di controllo che nascondono o ridimensionano, o che cosa mai dell'interfaccia utente,

Rende divertente lo sviluppo dell'interfaccia utente. Soprattutto una volta scoperto come gli piace giocare con i processi Asyc. Elimina davvero molti dei mal di testa causati da Winforms.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.