Diskuze: Rozložení prvků po otočení
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
V sobě vnořených StackPanelech mám ty prvky pod tím číslem. A StackPanely mám pak ve ViewBoxech. Ty jsou pak vloženy v příslušné oblasti Gridu. Nějak si teď neumím představit, jak by to šlo StackPanelem vyřešil. Spíš jsem si myslel, že by to chtělo změnit ten Grid a následně umístění prvků v něm. Ale nemám tušení jak, já doufám, že na to existuje v XAML nějaká vychytávka. Že se třeba napíše nějaká duplicitní verze XAML souboru a podle ní se řídí uživatelské rozhraní po přetočení, ale to určitě moc fantazíruji. Jsem v tomto začátečník amatér, snad mi to tu zkušení programátoři prominou.
Nikdy jsem to ještě nedělal, ale napadlo mě, pokud jsi schopen detekovat, jestli je aktuální zobrazení na výšku, či na šířku, udělat si v podstatě jeden grid na obě zobrazení a podle potřeby měnit u patřičné "buňky" visibility. Ale nevím, jestli je to vůbec reálné...
Tak i když neumím anglicky, tak jsem se pomocí Google překladače
dopátral nějakého řešení. Pro případné další zájemce je zde uvedu.
Nevím, jestli je to tedy úplně nejoptimálnější způsob, ale pro mě to je
postačující.
Je to popsáno např. zde:
https://blogs.windows.com/…ow-10-by-10/
Je tedy potřeba využít VisualStateManager, ve kterém je možné zadat
minimální efektivní počet pixelů šířky či výšky. V návaznosti na to
je pak možné zapsat, co všechno se má změnit při dosažení této
hranice.
Od dvousloupcového rozdělení jsem nakonec upustil, neboť zadané hranice
efektivních pixelů může dosáhnout tablet i v natočení na výšku. Pak je
rozložení ovládacích prvků proti velice nepraktické. Jestli lze detekovat
natočení místo efektivních pixelů jsem nezjistil.
V mém případě mi tedy už jen stačilo změnit orientaci u StackPanelu a
trošku změnit poměry řádků Gridu. Zde je daný kód VisualStateManageru,
který toto provádí:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="wideView">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="640"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="spOvladaciPrvky.(Orientation)" Value="Horizontal"/>
<Setter Target="druhyRadek.(Height)" Value="24*"/>
<Setter Target="tretiRadek.(Height)" Value="16*"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
Na závěr přikládám printscreen s výsledkem.
Tak snad to někomu bude k užitku.
Zobrazeno 5 zpráv z 5.