Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

WPF aplikacija nezavisno od rezolucije

[es] :: .NET :: WPF Programiranje :: WPF aplikacija nezavisno od rezolucije

[ Pregleda: 2568 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Orome
programer

Član broj: 273201
Poruke: 107
193.17.204.*



Profil

icon WPF aplikacija nezavisno od rezolucije29.01.2016. u 15:48 - pre 22 meseci
Pocinjem da ucim WPF, najvise me privukao zbog mogucnosti pravljenja aplikacije nezavisne od rezolucije. Ako mozete da mi pomognete savetima, primerima bilo cim sto imate kako se to postize u WPF? Pitam ovde jer je lakse pitati na nasem jeziku nekoga ko ima iskustva nego na engleskom.

Da doprinesem, na formu sam nalepio button na kom sam postavio poruku Hello World, u XAML delu button-a sam stavio HorizontalAlignment="Stretch" i VerticalAlignment="Stretch". Za formu sam ubacio iz nekog primera sa neta sledece Height="{Binding SystemParameters.PrimaryScreenHeight}" i Width="{Binding SystemParameters.PrimaryScreenWidth}".

Efekat je da kada pokrenem ekran i uhvatim za ivicu forme i menjam velicinu ekrana button menja velicinu, sto verovatno radi ovaj Stretch. Da li to znaci da bi mi Stretch na Horizontal/Vertical Alignment-u pomogao na svakoj kontroli? Pitanje je kako da obezbedim da bez obzira na rezoluciju ekrana moja forma pokrije recimo full screen, ili cetvrtinu ekrana, da to uradi prilikom load-a ekrana i prilagodi kontrole velicini forme proporcionalno.

Razumeo sam da je WPF resenje za ovaj problem, svaka pomoc je dobrodosla.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 5806



Profil

icon Re: WPF aplikacija nezavisno od rezolucije29.01.2016. u 16:43 - pre 22 meseci
Ok, moras da zaboravis sve sto si znao o resizingu u winForms aplikacijama Po defaultu (osim ako kontejner ili sama kontrola ne forsiraju drugacije), kontrole u WPFu uvek zauzimaju maksimalan prostor u svom parent.

Dakle nije bilo potrebe da nalepis binding na Width/Height, dugme na formi (ako je samo dugme) ce zauzeti povrsinu forme.

U WPFu se resolution adaptacija postize tako sto su svi vizuelni elementi vektorski umesto bitmapirani. Tako da se bazicno promena velicine forme transponira hijerarhijski kroz vizuelno drvo koristeci u osnovi kontejnersku logiku i afine transformacije.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Orome
programer

Član broj: 273201
Poruke: 107
193.17.204.*



Profil

icon Re: WPF aplikacija nezavisno od rezolucije29.01.2016. u 17:07 - pre 22 meseci
Sta znaci :
1.) kontrole u WPFu uvek zauzimaju maksimalan prostor u svom parent ?
2.) dugme na formi (ako je samo dugme) ce zauzeti povrsinu forme.

To da su vizuelni elementi vektorski to sam procitao i jasno mi je, i jasno je da to daje mogucnost resavanja problema sa rezolucijom.

Elem, nasao sam ovaj kod pa ako moze komentar.

<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Viewbox Stretch="Uniform">
<Grid Width="400" Height="300">
<Button Content="Button" Margin="16,8,0,0"
Width="104" Height="32"
HorizontalAlignment="Left"
VerticalAlignment="Top" />
<CheckBox Content="CheckBox" Margin="136,8,0,0"
Width="112" Height="24"
HorizontalAlignment="Left" VerticalAlignment="Top" />
</Grid>
</Viewbox>
</Window>

Sta ovde tacno omogucava takvo ponasanje kontrola da se Strech-uju? Ovde se postavlja HorizontalAlignment i VerticalAlignment za button ali nije Stretch kao u prethodnom primeru. Koliko shvatam definicija button-a i checkbox-a je u ViewBox Stretch-u i to omogucava prilagodjavanje rezoluciji. Sta znaci navedeni Width i Height za button kada se ce resize-ovati. I sta znaci ovo HorizontalAlignment="Left" i VerticalAlignment="Top". Da li su to dve stranice koje ostaju fiksne prilikom promene velicine?

Takodje primetio sam da je namesten Width i Height isti kao kod forme, znaci da je Grid upotrebljivi prostor na formi za kontrole i da sam istim velicinama sve stavio kao raspolozivo za kontrole, jesam li u pravu?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 5806



Profil

icon Re: WPF aplikacija nezavisno od rezolucije29.01.2016. u 19:08 - pre 22 meseci
1 i 2. Znaci da ako kontrola nema postavljeno Widht i Height, prilagodjava se svom parentu. Npr:

Code (xml):

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Title="Big button" Height="300" Width="600">
    <Button Content="Big ass button!!!"/>
</Window>
 


Daje ovo (I ovo kad se resizuje). Hijerarhijom takivh elemenata moze da se napravi lep fluidni interfejs bez ruznih praznina.




Sto se tice tvog primera:

1. Stretch="Uniform" je default za vecinu kontrola (ako ne sve)
2. Vertical i Horizontal alignment ima uticaja na pozicioniranje u parentu. Ovde to znaci da su zalepljeni za top/left grida.
3. Grid je besmislen kad ima samo jednu celiju.
4. Koriscenje margina za pozicioniranje je bad practice.

ne znam sta si hteo da postignes, mozda nesto kao ovo?

Code (xml):

<Window  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300">
    <Viewbox>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="1*"/>
                <ColumnDefinition Width="3*"/>
            </Grid.ColumnDefinitions>
            <Button Content="Button"  />
            <CheckBox Content="CheckBox" Grid.Column="1" />
        </Grid>
    </Viewbox>
</Window>
 


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
Prikačeni fajlovi
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 5806



Profil

icon Re: WPF aplikacija nezavisno od rezolucije29.01.2016. u 19:11 - pre 22 meseci
Isto imaj u vidu da ViewBox manje vise remeti normalan WPF rendering. TO je malo, kako bi rekli, prinudni resizing. Ja ga nigde ne koristim, vise volim da napravim neki fluidni interfejs koji ce sa promenom rezolucije omoguciti vecu radnu povrsinu bez povecavanja velicine slova.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12220



Profil

icon Re: WPF aplikacija nezavisno od rezolucije29.01.2016. u 20:29 - pre 22 meseci
Treba napomenuti da je u WPF-u panel taj koji odredjuje velicinu i poziciju kontrola koje su u njemu. To je vrlo bitna razlika u odnosu na WinForms.
Kontrola samo "kaze" kolika bi htela da bude ali panel odlucuje.
There is no cloud; just someone else's computer.
 
Odgovor na temu

Orome
programer

Član broj: 273201
Poruke: 107
193.17.204.*



Profil

icon Re: WPF aplikacija nezavisno od rezolucije30.01.2016. u 11:20 - pre 22 meseci
Ok, sad mi je jasnije. Medjutim, ako je default na vecini kontrola "Uniform" je li moje pitanje o proporcionalnoj velicini forme u odnosu na rezoluciju pogresno? Tipa 1/4 ekrana bez obzira na rezoluciju.

Sada tvojim primerom vidim da se button bez podesavanja icega pa i Width i Height resize-uje automatski time sto ja menjam velicinu forme. Da li to znaci da bi WPF aplikacija trebala default-no odgovoriti na zahtev aplikacije nezavisno od rezolucije ili za neke fine radove ipak ima programiranja ili barem podesavanja.

 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1246
*.dynamic.sbb.rs.



Profil

icon Re: WPF aplikacija nezavisno od rezolucije31.01.2016. u 11:46 - pre 22 meseci
WPF po default-u koristi device independent pixels (px).
Da bi se izračunala gustina prikaza (dpi) uzima se native rezolucija!
i fizičke dimenzije display-a kao i dpi scaling settings iz podešavanja OS-a.
Ovako dobijena gustina se zaokružuje na približnu vrednost - efektivno na 72, 96, 120, 144, ... dpi i dalje korsiti kao takva.
Recimo, kod većine monitora koji su danas u upotrebi ova vrednost je 96 dpi (a matematički između 90 i 110).
Device independent pixel u WPF se definiše kao jedan fizički pixel na 96 dpi display-u.
Dakle:
Code:

1px na 96dpi = 1px fizički
96px na 96dpi = ~1inch fizički

1px na 120dpi = 1.25px fizički
96px na 120dpi = ~1inch fizički

1px na 144dpi = 1.5px fizički
96px na 144dpi = ~1inch fizički

Na ovoj slici je to lepo objašnjeno:

https://books.google.rs/books?...AA#v=onepage&q&f=false

E sad, odgovori na tvoje pitanje...

1. Nemoj koristiti ViewBox za skaliranje pošto nećeš moći da iskoristiš potencijalno raspoloživ prostor.
Elementi će ti biti nekada veći/nekada manji u odnosu na ostale aplikacije koje poštuju windows-ovu
dpi diskretizaciju i onda to može da izgleda ružno. Jednostavno, nećeš dobiti ono što bi želeo,
a i budeš ograničen na "krute" layout-e.

2. Koristi px kada zadaješ dimenzije da bi elementi lepo skalirali na različitim dpi display-a.
Videćeš da je ovo neobično/ne-štima ako promeniš rezoulciju sa native na recimo manju,
dobićeš fizički krupnije elemente (pošto se dpi ne menja, što je objašnjeno na slici).
Takvo ponašanje je by-design - sam windows GUI a i ostale aplikacije će biti krupnije, wpf prati tu filozofiju.
Po tom pitanju u principu nema potrebe da bilo šta menjaš ili doteruješ, tako je kako je.

3. Koristi grid-ove za osnovne delove layout-a putem kojih možeš relativno jednostavno da
okupiraš raspoloživi prostor. Auto/proporcionalne/fill dimenzije redova/kolona su bog i batina
kada govorimo o fleksibilnim layout-ima koji treba lepo da se fit-uju u rasploživ prostor.

4. Da li ćeš koristiti stretch ili zadavati dimenzije elementima, jednostavno zavisi od konkretnih
slučajeva i same filozovije vizuelnog dizajna koji si zamislio.
Kontejneri/paneli se češće strečuju a dugmadi/inputi češće dimenzionišu/aligniraju,
a na kraju ispravno je ono što je u konkretnom slučaju najbolje "leži".

Dakle, Wpf je već u određenoj meri (približno) resolution independent, na to dodati fleksibilan layout i to je to.


[Ovu poruku je menjao dusans dana 31.01.2016. u 12:57 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

[es] :: .NET :: WPF Programiranje :: WPF aplikacija nezavisno od rezolucije

[ Pregleda: 2568 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.