Články

Tisk článku Tisk článku

Návrh přihlašovacího formuláře - TextBox, PasswordBox, CheckBox a Label

[Zpět na kategorii]

Datum: 20. 4. 2012 19:41       Autor: Tomáš Jecha       Zobrazeno: 4721x

Kategorie: Aplikace

Témata: Aplikace

Seriál: Windows Presentation Foundation (WPF) - Díl 10.

Jak navrhnout jednoduchý přihlašovací formulář v technologii WPF. Zároveň popíši další čtyři ze základních komponent: TextBox, PasswordBox, CheckBox a Label.


Tento díl se věnuje několika novým komponentám (TextBox, PasswordBox, CheckBox a Label) na příkladu jednoduchého přihlašovacího formuláře.

Před samotným návrhem se krátce podíváme na smysl nově probíraných komponent.

TextBox

TextBox slouží jako vstupní komponenta pro zadávání neformátovaného textu. Hodí se na širokou škálu případů jako vstupní pole jednořádkového i víceřádkového textu. V našem formuláři bude sloužit pro zadávání uživatelského jména.

Má široké možnosti nastavování chování textu uvnitř sebe. Lze volit způsob zalamování (TextWrapping), povolovat posuvníku obsahu (VerticalScrollBarVisibility, HorizontalScrollBarVisibility) a také, zda je vůbec možné vložit nový řádek (AcceptsReturn). Samozřejmě podporuje nastavování velikosti a typu písma, což jsem popsal v minulém díle.

Hodnotu lze číst nebo nastavit vlastností Text.

TextBox

Na předchozím obrázku je defaultní nastavení TextBox komponenty pro jednořádkový vstup. Následující kód ukazuje, jak nastavit vlastnosti tak, aby bylo možné zadávat text s více řádky. Povoluje přidávání dalších řádků a aktivuje vertikální i horizontální posuvník:

<TextBox 
    HorizontalScrollBarVisibility="Visible" 
    VerticalScrollBarVisibility="Visible" 
    AcceptsReturn="True" />

image

Poznámka: Pokud povolíte zalamování (TextWrapping="Wrap"), docílíte stejné funkčnosti, jako volba v poznámkovém bloku “Zalamovat řádky”. Text tak nikdy nepřeteče na šířku TextBox.

PasswordBox

PasswordBox je funkčně podobný jako TextBox. Slouží ke skrytému zadávání hesla. Možnosti nastavení proti TextBox jsou pochopitelně omezené (nepotřebujeme řešit zalamování textu a podobně).

Hodnotu hesla lze číst nebo nastavit vlastností Password.

PasswordBox

CheckBox

CheckBox je jednoduchá vstupní komponenta, kterou lze vybrat jeden ze tří stavů (viz obrázek). Při běžné konfiguraci lze však volit pouze mezi možnostmi “Ano/Ne” (zaškrtnuto/nezaškrtnuto). Třetí stav je možné povolit vlastností IsThreeState = true.

CheckBox

Hodnotu lze číst nebo nastavit vlastností IsChecked. Ta může nabývat hodnotu true (zaškrtnuto), false (nezaškrtnuto) nebo případně null (ve Visual Basic Nothing; třetí stav).

Label

Label je pro mnoho lidí přecházejících z Windows Forms poněkud matoucí. Tam totiž slouží jako nejjednodušší komponenta pro zobrazení textu, o což  se ve WPF stará TextBlock. Label je proti tomu ve WPF většinou vnitřně stejně interpretován jako TextBlock. Což mimo jiné znamená, že je v případě, pokud chcete pouze zobrazit text, lepší použít přímo TextBlock.

V překladu Label znamená “popisek”. Konkrétně v případě WPF se jedná o popisek k libovolné jiné komponentě, kterou je možné aktivovat (přenést focus) klávesovou zkratkou Alt+[klávesa]. Ona konkrétní klávesa se označuje jako tzv. access key (přístupová klávesa) a my ji identifikujeme uvedením symbolu “_” (podtržítko) před požadovaný znak v textu popisku.

Následující kód ukazuje, jak vytvořit Label s popiskem “Ukázkový Label:” (písmeno “k” je access key), který odkazuje na TextBox vedle něj.

<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
    <Label Content="U_kázkový Label:" Target="{Binding ElementName=textBox1}" />
    <TextBox Width="200" Name="textBox1" />
</StackPanel>

Aby mohl Label fungovat, musí odkazovat na nějakou komponentu, kterou popisuje. K tomu slouží vlastnost Target. V příkladu jsem si cílový prvek pojmenoval vlastností Name jako “textBox1” a následně jsem použil výraz k vytvoření odkazu na pojmenovanou instanci komponenty:

{Binding ElementName=textBox1}

Použitý výraz nebudu nijak rozebírat, protože se výrazům budu věnovat v samostatných několika článcích.

Aplikace po stisknutí klávesy Alt zobrazí na všech elementech formuláře příslušné access keys a my tak jasně vidíme, že pro toto textové pole je klávesová zkratka Alt+k. Po jejím stisknutí se přenese focus na textové pole, což urychlí pohyb ve formuláři pomocí klávesnice.

Label WPF

Poznámka: Pokud chcete zobrazit v textu popisku podtržítko nepoužité jako access key, stačí jej zdvojit. Tedy “text_s_podtržítkem” zapište jako “text__s__podtržítkem”.

Návrh přihlašovacího formuláře

Nyní se vytvoříme jednoduchý formulář na přihlašování uživatelů. Funkčně nebude sice nic dělat, ale to v tuto chvíli není důležité. Bude vypadat takto:

Přihlašovací formulář

Při vytváření chceme chtít dosáhnout těchto výsledků:

  • Půjde zadat jméno uživatele, jeho heslo a bude k dispozici možnost zapamatovat přihlašovací údaje.
  • Klávesa Enter dialog potvrdí a klávesa Escape naopak dialog uzavře.
  • Klávesová zkratka Alt+… dovolí přeskočit na konkrétní pole.
  • Při spuštění aplikace je aktivní pole pro zadávání uživatelského jména.

Krok 1. – Hlavní rozložení formuláře

Máme založený nový projekt typu WPF Application.

Hlavnímu formuláři (MainWindow) můžeme nastavit nadpis a změnit barvu pozadí:

  • Nadpis: Title=”Přihlášení” 
  • Jako barvu pozadí jsem použil: Background="#FFE2E2E2"

Formulář dále rozdělíme do 3 základních částí (přesněji – řádků):

  1. Záhlaví – pro nadpis “Přihlášení k systému” – ten bude mít automatickou výšku podle svého obsahu.
  2. Obsah – tato část okna bude vyplňovat zbytek formuláře a bude se tak zvětšovat/zmenšovat při změně výšky celého formuláře.
  3. Zápatí – bude obsahovat tlačítka “Přihlásit” a “Storno” – stejně, jako záhlaví, bude mít výšku automatickou podle svého obsahu.

Výsledek může vypadat následovně (vložil jsem obarvené TextBlock elementy jako dočasnou výplň pro lepší představu):

image

Rozdělení na tyto řádky můžeme snadno provést elementem Grid:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <TextBlock Background="LightGreen" Text="Nadpis" FontSize="20" />
    <TextBlock Background="LightBlue" Text="Obsah" FontSize="20" Grid.Row="1" />
    <TextBlock Background="LightYellow" Text="Zápatí" FontSize="20" Grid.Row="2" />
</Grid>

Krok 2. – Nadpis a tlačítka v zápatí

V dalším kroku vyplníme první a poslední řádek. Nejprve nadpis:

<TextBlock Text="Přihlášení k systému" Margin="10" FontSize="20" />

Nadpis je tak větším písmem (velikost 20) a s odsazením 10 device-independent-pixels. Protože se jedná o první řádek Gridu (tedy index 0), nemusíme uvádět Grid.Row=”0”.

Dále vložíme tlačítka do spodní lišty. Seřazené budou vedle sebe a proto můžeme použít StackPanel:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="2">
    <Button Content="Přihlásit" Width="100" Margin="0 0 20 0" IsDefault="True" />
    <Button Content="Storno" Width="100" IsCancel="True" />
</StackPanel>

Nejprve jsem umístil StackPanel do spodního řádku (Grid.Row=”2”) a pro zarovnání k pravému okraji jsem nastavil HorizontalAlignment=”Right”.

Uvnitř StackPanelu se nachází tlačítka “Přihlásit” a “Storno”. Použil jsem u nich navíc tyto dvě vlastnosti:

  • IsDefault=”True” – označuje tlačítko na formuláři jako defaultní, které bude stisknuto klávesou Enter
  • IsCancel=”True” – označuje tlačítko na formuláři jako storno, které bude stisknuto klávesou Escape

Jako drobnou kosmetickou úpravu jsem přidal jednomu z tlačítek odsazení pravého okraje (Margin=”0 0 20 0”). Díku tomu není na druhé tlačítko přímo nalepené, ale vytváří mezi sebou mezeru.

Formulář vypadá následovně. Všimněte si podbarveného defaultního tlačítka “Přihlásit”, které se vyvolá při stisknutí Enter.

Login window

Krok 3. – Layout vstupních ovládacích prvků

Nyní nás čeká vložení jednotlivých vstupních komponent pro jméno, heslo a potvrzení, zda přihlašovací údaje uložit.

Pro tento účel využijeme další vnořený Grid. Ten bude umístěný uvnitř prostředního řádku hlavního Gridu (Grid.Row=”1”).

Vnitřek rozdělíme na 3 řádky (pro každý vstup jeden) a 2 sloupce (první sloupec popis hodnoty a druhý na vstupní prvek). Sloupce budou na šířku nastavené poměrem 1:2, protože působí lépe, pokud je více místa pro vstupní prvky.

A nakonec celý Grid vycentrujeme vertikálně na střed vlastností VerticalAlignment=”Center”. Kód definice vypadá následovně:

<Grid Grid.Row="1" VerticalAlignment="Center">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="2*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
</Grid>

Do Gridu následně přidáme popisky a jednotlivá pole:

<Label Content="_Uživatelské jméno:" VerticalAlignment="Center" Target="{Binding ElementName=txtUserName}" />
<Label Content="_Heslo:" Grid.Row="1" VerticalAlignment="Center" Target="{Binding ElementName=txtPassword}" />
<TextBox Grid.Column="1" Margin="10" Padding="4" Name="txtUserName" />
<PasswordBox Grid.Column="1" Grid.Row="1" Margin="10" Padding="4" Name="txtPassword" />
<CheckBox Content="_Zapamatovat přihlášení" Grid.Row="2" Grid.Column="1" Margin="10" Name="cbxRememberCredentials" />

Výsledek bude vypadat takto:

Login Form WPF

Vyzkoušejte si, že při stisknutí access keys se aktivují příslušné komponenty (Alt+U = uživatelské jméno, Alt+H = heslo, Alt+Z = zapamatovat přihlášení).

Krok 4. – Dolaďování, focus a funkční kód

Aktuální podoba formuláře má všechny prvky nalepené na okrajích. To můžeme snadno vyřešit nastavením vlastnosti okrajů Margin hlavnímu Gridu, který nese všechny komponenty na formuláři. Řekněme na hodnotu 10. Výsledek na následujícím obrázku je patrný.

Login Form WPF with margin

Dále bude vhodné zobrazit přihlašovací formulář na středu obrazovky, čehož dosáhneme pomocí vlastnosti: WindowStartupLocation="CenterScreen".

Také lze zamezit zvětšování nebo zmenšování formuláře pomocí vlastnosti ResizeMode="NoResize". Avšak pro testování můžete ponechat režim výchozí, tedy dovolující změnu velikosti.

Možná je matoucí, proč se připravoval dynamický layout, když bude zvětšování a zmenšování zakázané. První důvod je samozřejmě to, že považuji za důležité se dynamické pozicování naučit. A druhým důvodem je fakt, že formulář můžete někdy potřebovat předělávat. A čím větší je, tím hůře se upravuje, pokud je layout absolutně pozicovaný. Představte si, že máte svoji komponentu použitou na 50ti místech v aplikaci. Změnit její velikost v případě absolutního pozicování znamená upravit všech 50 míst, kde se nachází. Oproti tomu u dynamického pozicování máte nemalou šanci, že velká část vaší aplikace nebude manuální úpravy vůbec potřebovat, protože pozicování nepočítalo s fixní velikostí komponenty.

Dále chceme, aby aplikace při spuštění měla kurzor připravený v poli zadávání uživatelského jména. Toho lze docílit nastavením výchozího prvku do vlastnosti “FocusManager.FocusedElement” nad celým formulářem, kde uvedeme odkaz na vstupní pole pomocí výrazu podobně, jako je tomu u Label komponenty:

FocusManager.FocusedElement="{Binding ElementName=txtUserName}"

Jako finální úpravu můžeme přidat do tlačítek nějaký funkční kód, abychom ověřili funkčnost kláves Enter a Escape. Do tlačítka “Storno” vložte kód pro ukončení aplikace:

Application.Current.Shutdown();

A do tlačítka “Přihlásit” kód pro zobrazení informativní zprávy:

MessageBox.Show("Přihlášení.");

Nyní by okno mělo splňovat všechny původní požadavky.

WPF Login - finální podoba

Pro úplnost uvádím i kód celého okna. Pokud jej budete kopírovat, nezapomeňte přejmenovat jméno třídy (x:Class vlastnost úplně na začátku), pokud se váš projekt jmenuje jinak, než WpfApplication1.

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Přihlášení" Height="312" Width="525"
        FocusManager.FocusedElement="{Binding ElementName=txtUserName}" Background="#FFE2E2E2"
        ResizeMode="NoResize"
        WindowStartupLocation="CenterScreen"
        >
    <Grid Margin="10">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <TextBlock Text="Přihlášení k systému" Margin="10" FontSize="20" />
        <Grid Grid.Row="1" VerticalAlignment="Center">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="2*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Label Content="_Uživatelské jméno:" VerticalAlignment="Center" Target="{Binding ElementName=txtUserName}" />
            <Label Content="_Heslo:" Grid.Row="1" VerticalAlignment="Center" Target="{Binding ElementName=txtPassword}" />
            <TextBox Grid.Column="1" Margin="10" Padding="4" Name="txtUserName" />
            <PasswordBox Grid.Column="1" Grid.Row="1" Margin="10" Padding="4" Name="txtPassword" />
            <CheckBox Content="_Zapamatovat přihlášení" Grid.Row="2" Grid.Column="1" Margin="10" Name="cbxRememberCredentials" />
        </Grid>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="2">
            <Button Content="Přihlásit" Width="100" Margin="0 0 20 0" IsDefault="True" Click="Button_Click_2" />
            <Button Content="Storno" Width="100" IsCancel="True" Click="Button_Click_1" />
        </StackPanel>
    </Grid>
</Window>

Závěr

Tento díl by měl ověřit vaše znalosti z předchozích článků. Pokud budete mít jakékoliv konstruktivní připomínky nebo dotazy, neváhejte je vkládat do diskuse pod článkem.


> Na začátek

 

Hodnocení:

Hlasů: 10
Zvolte své hodnocení

Tomáš Jecha

Již několikátým rokem obhajuji ocenění Microsoft Most Valuable Professional. Pracuji ve společnosti AVAST jako architekt a vývojář interních systémů. Mimo to nabízím školení, konzultace a zakázkový vývoj. Na http://www.jecha.net naleznete více informací. Dále působím také jako lektor a konzultant v počítačové škole Gopas. V současné době se zajímám především o SQL Server a technologie přicházející s .NET Frameworkem 4.5. Společně s Tomášem Hercegem jsem napsal tento web a starám se o jeho administraci.

Podpořte vznik dalších článků

Související články

DílNázev článku 
Díl 1. Úvod do Windows Presentation Foundation (WPF) 19. 1. 2012
Díl 2. Architektura WPF – Dispatcher 26. 1. 2012
Díl 3. Jazyk XAML 2. 2. 2012
Díl 4. Architektura a objektový model WPF 9. 2. 2012
Díl 5. Device independent pixels 16. 2. 2012
Díl 6. Základy pozicování 23. 2. 2012
Díl 7. Grid 16. 3. 2012
Díl 8. Canvas, StackPanel, WrapPanel 22. 3. 2012
Díl 9. ContentControl, Button a TextBlock 10. 4. 2012
Díl 10. Návrh přihlašovacího formuláře - TextBox, PasswordBox, CheckBox a Label 20. 4. 2012

RSS Feed RSS Feed

Diskuse

Pokračování

Datum: 23.4.2012 17:07
Autor: neregistrovaný (88.83.177.73)
Hodnocení autora: není
Příspěvků: 0
Dobrý den,
nejprve bych rád poděkoval za velmi pěkně napsané přínosné články.

Dále bych se rád zeptal, do jakých podrobností budou sahat články budoucí, zajímalo by mě např. dynamické přidávání obsahu, záludnosti wpf vs. silverlight, změna xaml vlastností z kódu vb/cs atp.

Díky
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Pokračování

Datum: 24.4.2012 15:08
Autor: Tomáš Jecha
Hodnocení autora: 844
Příspěvků: 1476
Dobrý den,
způsob ovládání z kódu budu probírat. V tuto chvíli se ještě několik článků budu věnovat návrhu UI a používání komponent. Pak proberu to, jakým způsobem vše vnitřně funguje a jak pracovat s objektovým modelem WPF z kódu (což zahrnuje vlastnosti, binding, strom objektů atp.). Porovnání se Silverlightem pravděpodobně rozebírat nebudu. Možná na to napíšu samostatný článek.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Ďalšie diely..

Datum: 18.5.2012 17:28
Autor: neregistrovaný (178.41.29.40)
Hodnocení autora: není
Příspěvků: 0
Prosím vás, budu ešte vychádzať ďalšie diely? Za odpoveď pekne ďakujem!
Sp
 
           [Odpovědět]
 
Hodnocení: 2 Čekejte, prosím...

Re: Ďalšie diely..

Datum: 18.5.2012 18:29
Autor: Tomáš Jecha
Hodnocení autora: 844
Příspěvků: 1476
Rád bych další vydal hned jak budu mít chvíli čas.
 
           [Odpovědět]
 
Hodnocení: 4 Čekejte, prosím...

Re: Ďalšie diely..

Datum: 20.5.2012 17:45
Autor: neregistrovaný (88.83.177.73)
Hodnocení autora: není
Příspěvků: 0
taky se těším na další :)
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Re: Ďalšie diely..

Datum: 1.9.2012 15:12
Autor: neregistrovaný (85.70.115.184)
Hodnocení autora: není
Příspěvků: 0
Děkuji za skvělý seriál.. Doufám, že bude pokračovat. =)
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

skvely clanok

Datum: 27.5.2012 11:10
Autor: neregistrovaný (89.173.138.111)
Hodnocení autora: není
Příspěvků: 0
Tiez sa pridavam, aby ste nahodou nemali pocit, ze clanok pisete pre seba :)

Skvely clanok a tesim sa na dalsie diely :)
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

label jako tlacitko button

Datum: 14.11.2012 18:56
Autor: neregistrovaný (62.201.21.163)
Hodnocení autora: není
Příspěvků: 0
Jeste sem neprisel na to jak udelat Label jako tlacitko,
aby pri kliku na labelu se provedl click.
Priradit labelu funkci buttonu, stylovat sem se uz naucil ale ted
uz jen takovato malickost.

Predem diky za radu.

Dexxtter
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: label jako tlacitko button

Datum: 14.11.2012 19:13
Autor: Tomáš Jecha
Hodnocení autora: 844
Příspěvků: 1476
Jen pro upřesnění - ve WPF používejte místo Labelu raději TextBlock. Label je jen container na objekty popisující nějaký element na formuláři. Textový popisek je sám o sobě jen TextBlock.

K vašemu problému - dělá se to obráceně. Buttonu změníte jeho control template (vlastnost Template) na obyčejný TextBlock. Chcete jen změnit vzhled tlačítka.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: label jako tlacitko button

Datum: 15.11.2012 23:50
Autor: neregistrovaný (62.201.21.163)
Hodnocení autora: není
Příspěvků: 0
Chtel sem ho vyuzit jako tlacitko.

Jde mi o to pouzit text jako tlacitko jako je ve webu hypertextovy odkaz.

Myslel sem ze bude nejlepsi pouzit label a zmenit mu vlastnost na
button, takze ted nevim co je spavne, nebo nejlepsi.
Protoze kdyz pouziju button s vlastnosti textBlock nebude text ve vzhleu klasickeho textboxu tedy oramovany text coz nechci.

zde je nahled tlacitek jak sem to myslel.
http://datastore.addat.cz/web/test/obr.j...

Poradte prosim.

 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: label jako tlacitko button

Datum: 16.11.2012 10:00
Autor: Tomáš Jecha
Hodnocení autora: 844
Příspěvků: 1476
Řešení, které jsem vám psal jsem správné. První si přečtěte něco o control templates. Řešení, které tu ale píšete vy, jsou absolutně mimo koncept WPF a účel jmenovaných komponent. Zajímalo by mě, jak jste k nim přišel.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: label jako tlacitko button

Datum: 16.11.2012 10:36
Autor: neregistrovaný (62.201.20.140)
Hodnocení autora: není
Příspěvků: 0
OK. vyzkousim to.

Mate na mysli pouzivat text jako tlacitko, ze je mimo koncept wpf?

Hlavne mi doslo ze textbox neni to same co textBlock,
v tom je jadro pudla.

Takze jdu zkouset.

Diky.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: label jako tlacitko button

Datum: 16.11.2012 12:03
Autor: Tomáš Jecha
Hodnocení autora: 844
Příspěvků: 1476
Mimo jiné. Použijte tlačítko jako tlačítko, kterému jen změníte vzhled. Ne naopak, to nedává smysl.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: label jako tlacitko button

Datum: 20.11.2012 13:19
Autor: neregistrovaný (62.201.20.140)
Hodnocení autora: není
Příspěvků: 0
Uz se mi to povedlo, sel jsem na to ze spatnyho uhlu:)
Potreboval sem nakopnout.

Diky za radu.

 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Xaml vs. editor

Datum: 27.12.2012 22:48
Autor: Josef Hranec
Hodnocení autora: -1
Příspěvků: 28
Dobrý den, úvodem přikládám kladnou reakci na Váš seriál.
Chtěl bych se zeptat, pochopil jsem správně, že je výhodné psát formulář přímo v xamlu? Je editor v něčem nevýhodný? Nebo jde o Vaši osobní zkušenost a zvyk. Vyžaduje to znalost všech těch objektů a jejich vlastností... Když pominu IntelliSense.
Jinak WPF se mi po přečtení Vašeho seriálu velice zalíbilo, jen se mi zdá, že Visual Studio není tak pružné jako při WinForms. Regenerace formuláře po jakékoliv změně v kódu je celkem dlouhá. Je to správný postřeh? Děkuji, Hranec.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Xaml vs. editor

Datum: 28.12.2012 10:40
Autor: Tomáš Jecha
Hodnocení autora: 844
Příspěvků: 1476
Dobrý den,
hlavním důvodem proč nepoužívat návrhář je to, že nedokáže pracovat se všemi možnostmi WPF a nedokáže přehledně zobrazit všechna upřesňující nastavení. Je to víceméně stejný důvod, jako při opouštění vizuálních návrhářů u HTML. Neříkám, že je návrhář k ničemu (můžete ho například používat v kombinaci se XAML editorem), nicméně pokud budete pracovat s WPF častěji, stejně skončíte u psaní XAML kódu přímo, protože pak máte větší kontrolu nad tím, co děláte.

Co se týká "regenerace formuláře", tak nevím co tím myslíte. Píšete o času změny zobrazení vzhledu v editoru po úpravě kódu v XAML editoru?
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Xaml vs. editor

Datum: 28.12.2012 12:20
Autor: Josef Hranec
Hodnocení autora: -1
Příspěvků: 28
add1

Děkuji za odpověď, psát přímo xaml je celkem sympatické, jen to chce asi cvik.

add2

Řekněme:
-mám formulář (i jednoduchý) ve wpf a k němu zdroj *.cs
-ve zdroji udělám nějakou změnu (třeba jen nadeklaruji proměnnou)
-zkompiluji F5
-zobrazím formulář a než se zregeneruje, tak to chvilku trvá. Píše to "Loading... Press ESC to cancel"

U WinForm to bylo hned. Není to nějak dlouhá doba (do dvou sekund), na druhou stranu učím se to a jde o velmi jednoduchý formulář. Mám obavu, že u rozsáhlejších projektů by to bylo obtěžující.
Mám Windows XP a Microsoft Visual C# 2010 Express.

Možná jde i o výkon počítače... Pokud jste to nepozoroval, pak to nemůže být nic hrozného.



 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Xaml vs. editor

Datum: 28.12.2012 14:13
Autor: Tomáš Jecha
Hodnocení autora: 844
Příspěvků: 1476
Toto je způsobeno tím, že se vaše assembly nejdříve kompiluje a poté se komponenty zobrazí v návrháři. Nicméně většinu času kompilace nezabírá zpracování samotného formuláře, takže i při rozsáhlejších projektech by neměla doba kompilace stoupat příliš drasticky. Pokud by takový problém nastal (například 100+ formulářů), lze rozdělit komponenty do samostatných assembly. Velkou výhodu však vidím v tom, že kompilace není potřeba vždy. Při běžném návrhu WPF aplikací kompiluji až při vytváření nových komponent nebo testování.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Xaml vs. editor

Datum: 28.12.2012 14:34
Autor: Josef Hranec
Hodnocení autora: -1
Příspěvků: 28
Děkuji, nemám ambice tvořit megaprojekty, takže si myslím, že se s wpf srovnám. Důležité pro mě je hlavně to, že studium wpf není pro mě ztráta času. Neživím se programováním a ani nebudu. Je to spíš koníček, na který nemám moc času, tak bych se nerad ubíral špatným směrem.
Chystáte pokračování seriálu? Je to velmi čtivé, jako ostatně všechny Vaše příspěvky, které jsem doposud od Vás četl. Děkuji, Hranec.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Pokračování

Datum: 23.3.2013 18:50
Autor: neregistrovaný (90.176.13.240)
Hodnocení autora: není
Příspěvků: 0
Dobrý den
Chtěl bych se zeptat zda-li se někdy svět dočká pokračování tutoriálu, je jediný z kterého sem alespoň něco pochopil.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.