Temat: Windows Forms a WPF

Jak się programuje w WPF? Warto się przestawić? Jest to nowsze API wykorzystujące grafikę wektorową. To znaczy że byłoby dobre do pisania programów typu CAD, natomiast jak sprawdza się gdy mamy wyświetlić obrazek rastrowy?
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Windows Forms a WPF

Wszystko fajnie, WPF jest dobrą technologią, ale taką. która nie doczeka się prawdopodobnie nowej odsłony. Jest więc martwa.
Łukasz Szumyło

Łukasz Szumyło Xamarin Developer

Temat: Windows Forms a WPF

Borysław Bobulski:
Wszystko fajnie, WPF jest dobrą technologią, ale taką. która nie doczeka się prawdopodobnie nowej odsłony. Jest więc martwa.

Windows Forms nie jest rozwijany od lat więc w czym problem.Łukasz Szumyło edytował(a) ten post dnia 16.12.11 o godzinie 09:39

konto usunięte

Temat: Windows Forms a WPF

Andrzej Borucki:
Jak się programuje w WPF? Warto się przestawić?
To różnica w filozofii pisania softu: w WPF deklarujesz UI podobnie jak w HTML. W WinForm piszesz tzw. imperatywnie. Np. SDK do Androida przyjął podobną filozofię.
WPF pięknie wspiera pattern UI MVVM - warto od razu go poznać i pisać formatki .xaml bez żadnego code-behind! Inaczej będzie po staremu i IMHO nie ma wtedy sensu migrować z WinForm.
Jest to nowsze API wykorzystujące grafikę wektorową.
Mi się podoba - masz po prostu grafikę wektorową zapisaną w XAMLu (potraktuj to jako inną wersję SVG) i sobie ją wyświetlasz. Nie ma problemu z konwersją z innych formatów wektorowych w ogólności, natomiast szczegóły skomplikowanych projektów graficznych oczywiście się źle konwertują (efekty z Corela mi nie przeszły)
jak sprawdza się gdy mamy wyświetlić obrazek rastrowy?
normalnie, nie rozumiem o co pytasz - wyświetlenie rastra to nic skomplikowanego. Dostęp do pixeli jest. Samo API do bitmap jest IMHO dość rozbudowane, można ładować własne profile kolorów z plików icc i szykować obrazek do druku; kolega z drukarni był w pełni usatysfakcjonowany zakresem kolorów, które mu skonwertować (wiele z tego nie rozumiejąc;-)

WPF to również uproszczone API do 3D. Można w miarę łatwo skonwertować model 3D i wyświetlić. Model jest dosyć uproszczony (ok. 4 rodzaje materiałów, ok. 3 światła, 2 kamery), nie nadaje się raczej do pisania własnych gier, ale ta prostota może być również zaletą, gdyż nie do wszystkich zastosowań potrzebna jest znajomość shaderów, vertexów itd.
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Windows Forms a WPF

Łukasz Szumyło:
Windows Forms nie jest rozwijany od lat więc w czym problem.

Słuszna uwaga. Nie zauważyłem
Tomasz M.

Tomasz M. never go full
retard!

Temat: Windows Forms a WPF

Borysław Bobulski:
Łukasz Szumyło:
Windows Forms nie jest rozwijany od lat więc w czym problem.
Słuszna uwaga. Nie zauważyłem

Wszystko martwe, to w czym pisać panie premierze? W czym pisać?

Odpowiedź jest chyba prosta - najlepiej spróbować wszystkiego i wybrać najlepszą i adekwatną do celu technologię ;] Przecież można nawet http://wxnet.sourceforge.net/Tomasz M. edytował(a) ten post dnia 16.12.11 o godzinie 15:52
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Windows Forms a WPF

WPF ma wiele zalet:
- duże możliwości modyfikowania wyglądu i działania kontrolek (w WinForms zwykle trzeba było pisać własne kontrolki)
- separacja widoku od modelu danych i logiki czyli wspomniany MVVM (niestety brak wsparcia ze strony VS.NET)
- Bindowanie danych złożonych obiektów (z tym WinForms miał problemy)
- Podpinasz kontekst danych i bindujesz kontrolki (wWinForms trzeba było kłaść na formatkę wiele DataSource'ów)
- obsługa grafiki wektorowej (w WinForms brak)
- wbudowane animacje (w WinForms trzeba było używać dodatkowych bibliotek)
- możliwość zmiany wyglądu aplikacji (coś w stylu CSS)
- dekoratory (adorners), które umożliwiają dodawanie do kontrolek jakby dodatkowej warstwy

ale również kilka wad:
- WPF jest trudniejszy od WinForms
- brakuje debugera w databind (pewnie będzie w następnej wersji, bo Silverlight 5 już ma)
- co jakiś czas trzeba grzebać w plikach XAML
- brak wbudowanego mechanizmu lokalizacji językowej (w WinForms był jak był, ale był)

Kluczowe pytanie jakie aplikacje chcesz pisać? Wyświetlenie obrazka to żaden problem, ale sądzę, że nie do tego tylko będzie służyła aplikacja :)

Tworzę właśnie w WPF aplikację w stylu Autocad w połączeniu z bazą danych i nie wygląda to tak różowo jak mogłoby się wydawać.
Ale i tak dużo lepiej niż w WinForms.

Polecam naukę WPF, gdyż na tym bazuje Silverlight, który jest wykorzystywany w LightSwitch, Windows Phone, Windows 8 i Metro UI.
WinForms będzie tracił na znaczeniu (choć trzyma się mocno), a WPF będzie pewnie rozszerzany.

Temat: Windows Forms a WPF

Jak kilka lat temu usłyszałem o XAML miałem podejście delikatnie mówiąc sceptyczne. Do czasu aż nie wgryzłem się w temat i postanowiłem coś stworzyć przy użyciu WPF. Odgłos bicia się w piersi słychać było kilometry dalej ;) Jak nie lubię MS tak za WPF daję mu zasłużone 5/5.
Łukasz L.

Łukasz L. Programista C# .NET

Temat: Windows Forms a WPF

Witam.

Uważam, że WPF to bardzo dobra technologia, jej zalety zostały już napisane wyżej, ja dodam, że technologia ta umożliwia:

- udział grafika w projekcie, skupionego tylko na warstwie prezentacji bez pisania żadnego kodu (Expression Blend)
- bardzo łatwa możliwość zmiany wyglądu całej aplikacji
- wykorzystane hardware'u do renderowania widoku

Z wad można dodać kiepski i wolno działający designer w VisualStudio. Według mnie programiście nie-grafikowi dużo szybciej idzie tworzenie całego widoku z poziomu edycji XAML.

Nie uważam, że jest to technologia trudna. Całkowite przestawienie się na WPF to moim zdaniem daleko posunięta decyzja, bo jednak znajdą się obszary, gdzie WinForms sprawdzi się lepiej. W każdym bądź razie znajomość tej technologi jest warta uwagi, umożliwia także dość swobodną migrację do Silverlight'a.Łukasz L. edytował(a) ten post dnia 16.12.11 o godzinie 18:58

Temat: Windows Forms a WPF

Maciek Kański:
jak sprawdza się gdy mamy wyświetlić obrazek rastrowy?
normalnie, nie rozumiem o co pytasz - wyświetlenie rastra to nic skomplikowanego. Dostęp do pixeli jest. Samo API do bitmap jest IMHO dość rozbudowane, można ładować własne profile kolorów z plików icc i szykować obrazek do druku; kolega z drukarni był w pełni usatysfakcjonowany zakresem kolorów, które mu skonwertować (wiele z tego nie rozumiejąc;-)

Z tego co widzę, zamiast Bitmap jest BitmapSource. Czy jest jakiś sposób aby w WPF wyświetlić bitmapę ze stylem XP? Jest uxtheme.dll mające funkcję DrawThemeBackground które potrzebuje HDC. Przykład dla WindForms to http://stackoverflow.com/questions/6276131/c-sharp-net..., daje się wykonać bo Graphics ma metodę GetHdc() a jak to zrobić w WPF?
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Windows Forms a WPF

Chodzi Ci o WrteableBitmap. To bitmapa po której można sobie rysować w WPF, co się chce. Tak jak tu...

http://www.fku-aura.com/matrixreliability/index.html

Dla przykładu narysujmy na obiekcie klasy WriteableBitmap zawartość pliku Background.png i wyświetlmy WriteableBitmap w obiekcie klasy Image (imgOut)

XAML

<Image x:Name="imgBitmapSrc" Height="600" Width="800" HorizontalAlignment="Left" Stretch="Fill" VerticalAlignment="Top" Source="Background.png" Visibility="Collapsed"/>

<Image x:Name="imgOut" Height="600" Width="800" HorizontalAlignment="Left" Stretch="Fill" VerticalAlignment="Top">



WriteableBitmap writeableBitmap;
Rectangle rectOut;

rectOut = new Rectangle();
rectOut.Width = someWidth;
rectOut.Height = someHeight;

ImageBrush imageBrush = new ImageBrush();
imageBrush.ImageSource = imgBitmapSrc.Source;
rectOut.Fill = imageBrush;

writeableBitmap = new WriteableBitmap(someWidth, someHeight);
writeableBitmap.Render(rectOut, new MatrixTransform());
imgOut.Source = writeableBitmap;
writeableBitmap.Invalidate();
Borysław Bobulski edytował(a) ten post dnia 23.12.11 o godzinie 01:29
Tomasz M.

Tomasz M. never go full
retard!

Temat: Windows Forms a WPF

Podepnę się pod wątek z takim pytaniem - jakie są "good practices" dotyczące bindowania danych? Ja wiem, że są frameworkowe bindery, ale czy jest to wydajne (bo głównie chyba dynamiczne, szczególnie odniesienia do drzewa struktury interfejsu)? Czy może lepiej bindować pod maską (zdarzeniowo) ? Jak bindować rozbudowane struktury np. gridy wielopoziomowe itd.?

konto usunięte

Temat: Windows Forms a WPF

Moim zdanie tworzenie w XAML pod Visual Studio jest jeszcze niedopracowane. Brakuje mnóstwa rzeczy do wyłapywania błędów, edycji kodu, śledzenia zawartości stosowanych stylów. O małych błędach programista dowiadujemy się podczas debugowania, a nie podczas kodowania. Praktycznie wszystkie błędy wywala przy debugowaniu. Osobiście wolę ręcznie edytować kod XAML ale moim zdanie trwa to zdecydowanie dłużej niż np. we Flash. Ponadto ten nieszczęsny format ARGB do określania kolorów - brakuje programów, które by taki format obsługiwały. Ale szczerze mówiąc to jest to technologia przyszłości.
Główne zalety:
- WPF wykorzystuje kartę graficzna do rysowania interfejsu, WinForm nie,
- możliwość wykorzystania już gotowych stylów oraz szablonów,
- wykorzystanie XAML w: Silverlight, WPF, Windows Phone, WCF,
- możliwość łatwej zmiany wyglądu aplikacji poprzez zmianę Themes,
- możliwość tworzenia świetnych animacji interfejsu, choć należy mieć do tego dobry sprzęt,

Wady:
- dziwna współpraca między code-behing, a XAML - chodzi mi tutaj o proces wiązania danych
- brak narzędzi do edycji XAML z prawdziwego zdarzenia.
- niespójne pewne elementy języka XAML
- należy dużo się natrudzić, aby wykonać jakiś fajny wygląd interfejsu
- błędy przy jednoczesnym tworzeniu projektu w Visual Studio oraz Expression Blend
- format ARGB

Narzędzia do tworzenia w XAML:
- Visual Studio 2010
- Expression Blend 3
- Kaxaml
- ARGBHexConverter
Arkadiusz Szechlicki

Arkadiusz Szechlicki Software Engineer,
arkadiusz.szechlicki
@ace-s.pl

Temat: Windows Forms a WPF

Tomasz M.:
Podepnę się pod wątek z takim pytaniem - jakie są "good practices" dotyczące bindowania danych? Ja wiem, że są frameworkowe bindery, ale czy jest to wydajne (bo głównie chyba dynamiczne, szczególnie odniesienia do drzewa struktury interfejsu)? Czy może lepiej bindować pod maską (zdarzeniowo) ? Jak bindować rozbudowane struktury np. gridy wielopoziomowe itd.?

Good Practices - poczytaj sobie o wzorcu MVVM (Model-View-ViewModel)

Generalnie bindowanie to genialny mechanizm który wybitnie ułatwia życie, jednakże w życiu nic nie jest za darmo, i podobnie jest w tym przypadku - bindowanie bazuje na refleksji, więc jest pewien narzut na wydajność, aczkolwiek przy dzisiejszym sprzęcie ma to coraz mniejsze znaczenie. Rozważając użycie bindowania, musisz zadać sobie pytanie, czy chcesz załatwić sprawę jedną linijką kodu Xaml kosztem znikomego spadku wydajności, czy z palca oprogramować przypisywanie wartości i notyfikację o zmianach (jedno- lub dwustronną) - pomijając scenariusze, gdzie każdy zaoszczędzony cylk procesora jest na wagę złota, zazwyczaj wybieram bindowanie.
Jak bindować rozbudowane struktury np. gridy wielopoziomowe itd.?
Nie jestem pewien czy dobrze zrozumiałem pytanie:
- jeśli masz na myśli klasyczny scenariusz master-detail, to po prostu grid 'master' bindujesz do źródła danych, a drugi grid lub formularz (detail) bindujesz do aktualnie zaznaczonego elementu w gridzie (w 99% wpf-owych gridów jest to properties SelectedItem)
- natomiast jeśli chodzi o struktury drzewiaste, to jest coś takiego jak HierarchicalDataTemplate, który możesz sobie skonfigurować jak ci się podoba
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Windows Forms a WPF

Arkadiusz Szechlicki:
Jak bindować rozbudowane struktury np. gridy wielopoziomowe itd.?
Nie jestem pewien czy dobrze zrozumiałem pytanie:
- jeśli masz na myśli klasyczny scenariusz master-detail, to po prostu grid 'master' bindujesz do źródła danych, a drugi grid lub formularz (detail) bindujesz do aktualnie zaznaczonego elementu w gridzie (w 99% wpf-owych gridów jest to properties SelectedItem)
- natomiast jeśli chodzi o struktury drzewiaste, to jest coś takiego jak HierarchicalDataTemplate, który możesz sobie skonfigurować jak ci się podoba

Dodam jeszcze 3 punkt:
- bindowanie zagnieżdżonych obiektów, np. Customer.Address.Street

konto usunięte

Temat: Windows Forms a WPF

Do nauki WPF'a (czy też bardziej Silverlight'a i Blenda [to jest narzędzie preferowane do pracy z XAML'em - przeze mnie :P]) polecam http://www.microsoft.com/expression/resources/blendtra.... Po paru pierwszych filmikach - mogę powiedzieć, że jest to dosyć dobrze wytłumaczone, jak pracować z Blend'em (lub Blenderem, jak kto woli ;)).

Następna dyskusja:

Deklaracja w Windows Forms




Wyślij zaproszenie do