Pytanie w sprawie canvas, wpf, xaml, grid, .net – Siatka a płótno

11

Szukam opinii na temat korzystania z paneli Canvas vs Grid w WPF. Muszę utworzyć klasyczne formularze wejściowe, które mają w zasadzie układ siatki, niektóre mogą mieć małe siatki danych wewnątrz, grupy grupowe, ale wszystkie wyrównane w układzie siatki. Staram się używać panelu Siatka lub Płótno do wszystkich moich formularzy. Siatka daje mi dobrą strukturę; Mogę łatwiej utrzymywać wyrównanie elementów sterujących. Będę miał klasę bazową (która dziedziczy klasę Window) dla wszystkich okien, więc projektant w Visual Studio będzie bezużyteczny, ponieważ ma problemy z tego rodzaju dziedziczeniem, a z panelem siatki naprawdę nie potrzebuję nawet projektanta i mogę ustaw okno SizeToContent, aby wszystko dobrze pasowało. Ale znowu z Canvas mam możliwość pozycjonowania kontroli w dowolny sposób, jaki mi się podoba, i to jest tylko korzyść, którą widzę podczas używania Canvas.

Nie miałem tak dużego doświadczenia w WPF, aby przewidzieć, jakie problemy można uzyskać z żądań klientów dotyczących układu. W formularzach internetowych czasami używam pozycjonowania bezwzględnego dla formularzy na wypadek, gdyby klient miał jakieś „specjalne” żądanie, czy mieć piksel kontrolny w prawo czy w lewo na wyższym itd. Wszyscy pracujący z wymagającymi klientami wiedzą o co mi chodzi.

Chciałbym zobaczyć, co sądzisz, jakie są zalety i wady zarówno dla budowania układu aplikacji biznesowych? Dlaczego jeden jest lepszy od drugiego? Jakiekolwiek przypadki, w których jeden panel byłby niewłaściwy w użyciu, a inny nie? Jakie są wady jednego panelu na drugim? Jakiego panelu użyłbyś?

Dzięki

Twoja odpowiedź

5   odpowiedzi
0

nadal można użyć projektanta wizualnego XAML do tworzenia / edycji zawartości siatki.

Jedną z głównych zalet UX WPF / SL / XAML jest możliwość „płynnego” układu HTML. Nawet jeśli nie potrzebujesz tego w swoim obecnym projekcie, to zdecydowanie przyszłość i warto nauczyć się finezji.

Sprawdź doskonałą listę Rob RelyeaRedaktorzy XAML

Zepsuty link, popraw kbo4sho88
2

Zdecydowanie Siatki wydają się być tym, czego potrzebujesz do swoich wymagań.

Chciałbym porównać siatki do tabel w html (bardzo użyteczne, gdy są odpowiednio używane), podczas gdy Canvas jest bardziej jak div. Różnica polega na tym, że Gridy są tabelami, które powinny być w HTML, podobnie jak div i Canvas.

Jeśli chodzi o siatki, poświęć trochę czasu na zdefiniowanie definicji RowDefinitions i ColumnDefinitions, zamiast umieszczania marginesów na elementach sterujących, aby umieścić wszystko poprawnie. Żałujesz tego, jeśli tego nie zrobisz.

absolutnie, ale ze względu na ten przykład chciałem użyć czegoś jako przykładu, pomyślałem, że to będzie najlepszy przykład. Jak już wspomniałem, siatki w WPF to tabele, które próbowały być w HTML. Chris Nicol
Huh ... wiesz, że używanie tabel do celów układu nie jest zalecane, prawda? luiscubal
0

co do dziedziczenia. Projektant Visual Studio w UWP, WPF generuje kod wsparcia dla bazy i podklasy z tymi samymi nazwami metod. Nie kompiluje się.

Od czasu, gdy wcześniej przygotowałem leki generyczne, możemy wrócić do poprzednich metodologii. Jednym z nich jest klasa pomocnicza. Każdy widok implementujeIBaseView i ma własnośćViewHelper lubViewHelper<T>. enum ViewHelperOptions może być potrzebne. Jeśli jest to wymagane, każdy z ViewHelperów może używać dziedziczenia bez łamania Visual Designer. Pozwala to na użycie kodu ogólnego, a także określonego kodu widoku bez zrywania modelu MVVM. Nazwijmy to MVHVM, ponieważ ViewHelper ma wiedzę o ViewHelper. To dalej oddziela V od VM.

Pełna implementacja może wymagać użyciaActivator.CreateInstance. Inną kwestią są konstruktorzy wywoływani przez projektanta. Musisz przenieść cały kod „will-crash-if-not-running” do Inicjalizacji zrodzonej z (powiedzmy) zdarzenia Loaded. Alternatywnie możesz skorzystać z (UWP):

if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{ DoStuffWhichShouldOnlyBeDoneAtRunTime(); }
16

bardziej niż cokolwiek innego. Siatka jest zdecydowanie najlepszym wyborem do dostosowania układu.

Zgadzam się z CSharperWithJava - <Grid> to znacznie bardziej praktyczny element ogólnego układu interfejsu użytkownika. Giffyguy
Będziesz chciał przejść do układu opartego na siatce lub panelu. Spójrz na przegląd MSDN systemu WPF Layout:msdn.microsoft.com/en-us/library/ms745058.aspx rmoore
Oto samouczek, który pomoże ci zacząć od układów siatki:wpftutorial.net/GridLayout.html CodeFusionMobile
3

rozpiętości kolumny / rzędu, szerokości, wysokości itd.

Moim zdaniem łatwiej byłoby wykonać układ różnych elementów na siatce, kontrolując sizez wierszy i kolumn niż robić wszystko zakodowane na płótnie. Ułatwi to także, jeśli zdecydują się zmienić postanowienia później.

Od Adama NathanaWPF Unleashed (s. 168):

Naśladowanie płótna za pomocą siatki Jeśli opuścisz siatkę z pojedynczym wierszem i kolumną i ustawisz wyrównanie poziome i wyrównanie pionowe wszystkich dzieci na wartości inne niż rozciąganie, dzieci zostaną dodane do pojedynczej komórki tak jak płótno. Ustawienie funkcji HorizontalAlignment na Left i VerticalAlignment na Top jest jak ustawienie Canvas.Left i Canvas.Top na 0. Ustawienie HorizontalAlignment na Right i VerticalAlignment na Bottom jest jak ustawienie Canvas.Right i Canvas.Bottom na 0. Ponadto zastosowanie wartości marginesu do każdego elementu może dać taki sam efekt, jak ustawienie dołączonych właściwości płótna do tych samych wartości.

Możesz także uzyskać kreatywność dzięki zawartości elementów sterujących w siatce, aby uzyskać lepszy poziom kontroli układu.

Płótno byłoby dobre dla czegoś w rodzaju okna dialogowego, które rzadko zmienia rozmiar, i ma tylko kilka elementów sterujących, ponieważ nakładanie ich w miarę wzrostu liczby byłoby czasochłonne.

Ja osobiście używam sieci. Ułożenie rzeczy na poziomie pikseli może być trochę więcej pracy, ale przez 5% czasu, który jest konieczny, warto usunąć wiele kłopotów. Jest to również miłe, gdy istnieje potrzeba zmiany rozmiaru wierszy i kolumn w locie, GridSplitter czyni to błyskawicznie.

Powiązane pytania