Kolejność właściwości w marginesie

218

Jeśli mam taki ciąg w XAML:

Storyboard.TargetProperty="Margin" From="1,2,3,4" To="0,0,0,0"

Co to jest górne dolne prawe i lewe? 1- prawy 2- górny 3- lewy 4 - dolny

Czy to prawda?

Papa John
źródło
1
Drugi wynik, szukając WPF celu marży, stackoverflow.com/questions/520422/... . lewy górny prawy dolny
Lukazoid
@PapaJohn Aby być bardziej szczegółowym dla @amit jhapodanego linku , spójrz na sekcję zatytułowaną XAML Valuesdla marginesu w tym linku.
nam

Odpowiedzi:

403
Margin="1,2,3,4"
  1. Lewo,
  2. Top,
  3. Dobrze,
  4. Dolny

Możliwe jest również określenie tylko dwóch takich rozmiarów:

Margin="1,2"
  1. Lewo i prawo
  2. Góra i dół

Wreszcie możesz określić jeden rozmiar:

Margin="1"
  1. używane dla wszystkich stron

Kolejność jest taka sama jak w WinForms.

Eee nie
źródło
5
LTRB to krótki zapis, który można łatwo zapamiętać.
Sai
44
Uwaga: jest to inna kolejność niż kolejność html w css, czyli Góra, Prawo, Dół, Lewo.
Ruskin
7
Czy ktoś ma jakiś wgląd w to, dlaczego zdecydował się na coś innego niż CSS?
Charles Clayton,
5
@crclayton - Jak napisałem; kolejność jest taka sama jak w WinForms. WinForms jest naturalnym poprzednikiem WPF, więc oprogramowanie (programiści) przeprowadziliby aktualizację z WinForms do WPF.
Erno,
30
Co powiesz na. WPF zaczyna się na Zachodzie. Netscape zaczyna się na północy? I oczywiście w obu przypadkach zgodnie z ruchem wskazówek zegara.
Martin Capodici,
33

Istnieją trzy unikalne sytuacje:

  • 4 liczby , np Margin="a,b,c,d".
  • 2 liczby , np Margin="a,b".
  • 1 liczba , np Margin="a".

4 liczby

Jeśli istnieją 4 numery , to jego left, top, right, bottom(a ruchu wskazówek zegara, zaczynając od koła środkowego lewego marginesu). Pierwsza liczba to zawsze „zachód”, jak „WPF”:

<object Margin="left,top,right,bottom"/>

Przykład: jeśli Margin="10,20,30,40"go użyjemy , wygeneruje:

wprowadź opis zdjęcia tutaj

2 liczby

Jeśli są 2 liczby , pierwsza to grubość lewego i prawego marginesu, druga to grubość górnego i dolnego marginesu. Pierwsza liczba to zawsze „zachód”, jak „WPF”:

<object Margin="a,b"/> // Equivalent to Margin="a,b,a,b".

Przykład: jeśli użyjemy Margin="10,30", lewy i prawy margines to 10, a górny i dolny to 30.

wprowadź opis zdjęcia tutaj

1 liczba

Jeśli jest 1 liczba , liczba ta jest powtarzana (jest to zasadniczo grubość ramki).

<object Margin="a"/> // Equivalent to Margin="a,a,a,a".

Przykład: jeśli Margin="20"go użyjemy , wygeneruje:

wprowadź opis zdjęcia tutaj

Aktualizacja 2020-05-27

Przez ostatnie 5 lat pracowałem nad aplikacją WPF na dużą skalę z ponad 100 ekranami. Część zespołu 5 deweloperów WPF / C # / Java. Ostatecznie zdecydowaliśmy się na użycie 1 liczby (dla grubości obramowania) lub 4 liczb. Nigdy nie używamy 2. Jest spójny i wydaje się dobrym sposobem na zmniejszenie obciążenia poznawczego podczas rozwoju.


Zasada:

Wszystkie numery szerokości zaczynają się po lewej stronie („Zachód” jak „WPF”) i idą zgodnie z ruchem wskazówek zegara (jeśli dwie liczby idą tylko dwa razy zgodnie z ruchem wskazówek zegara, a następnie odbijają pozostałe).

Contango
źródło
1
„Jeśli są 2 liczby, pierwsza to grubość lewego i prawego marginesu”. Ale w tym przykładzie pierwsza liczba to 30, i kończy się na górnym i dolnym marginesie.
Peter Bruins
21

Tylko dlatego, że komentarz @MartinCapodici jest niesamowity, piszę tutaj jako odpowiedź na widoczność.

Wszystko zgodnie z ruchem wskazówek zegara:

  • W PF start W est (lewy-> górny-> prawy-> dolny)
  • N etscape (tj. CSS) start N orth (góra-> prawo-> dół-> lewo)
Askoleina
źródło
7
<object Margin="left,top,right,bottom"/>
- or - 
<object Margin="left,top"/>
- or - 
<object Margin="thicknessReference"/>

Zobacz tutaj: http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.margin.aspx

chopikadze
źródło
3
W drugim przykładzie „lewy, górny”, jest faktycznie powtórzony: pierwsza liczba odnosi się do lewej i prawej, druga do górnej i dolnej, patrz moja odpowiedź poniżej.
Contango