Udostępnij przez


Formularze

Formularz to grupa kontrolek, które zbierają i przesyłają dane od użytkowników. Formularze są zwykle używane dla stron ustawień, ankiet, tworzenia kont i wiele innych.

W tym artykule omówiono wytyczne projektowe dotyczące tworzenia układów XAML dla formularzy.

Przykład formularza

Kiedy należy użyć formularza?

Formularz to dedykowana strona do zbierania danych wejściowych, które są wyraźnie powiązane ze sobą. Formularz należy użyć, gdy musisz jawnie zbierać dane od użytkownika. Możesz utworzyć formularz dla użytkownika w celu:

  • Zaloguj się do konta
  • Tworzenie konta
  • Zmienianie ustawień aplikacji, takich jak prywatność lub opcje wyświetlania
  • Weź udział w ankiecie
  • Kupowanie elementu
  • Prześlij opinię

Typy formularzy

Podczas myślenia o sposobie przesyłania i wyświetlania danych wejściowych użytkownika istnieją dwa typy formularzy:

1. Natychmiastowe aktualizowanie

strona ustawień

Użyj formularza natychmiastowego aktualizowania, gdy użytkownicy chcą natychmiast zobaczyć wyniki zmiany wartości w formularzu. Na przykład na stronach ustawień wyświetlane są bieżące wybory, a wszelkie zmiany wprowadzone w zaznaczonych opcjach są stosowane natychmiast. Aby potwierdzić zmiany w aplikacji, należy dodać program obsługi zdarzeń do każdej kontrolki danych wejściowych. Jeśli użytkownik zmieni kontrolkę danych wejściowych, aplikacja może odpowiednio odpowiedzieć.

2. Przesyłanie za pomocą przycisku

Inny typ formularza umożliwia użytkownikowi wybranie, kiedy przesyłać dane za pomocą kliknięcia przycisku.

kalendarz — dodawanie nowej strony zdarzeń

Ten typ formularza zapewnia użytkownikowi elastyczność reagowania. Zazwyczaj ten typ formularza zawiera więcej wolnych pól wejściowych formularza, a tym samym otrzymuje większą gamę odpowiedzi. Aby zapewnić prawidłowe dane wejściowe użytkownika i prawidłowo sformatowane podczas przesyłania, należy wziąć pod uwagę następujące zalecenia:

  • Upewnij się, że niemożliwe jest przesłanie nieprawidłowych informacji, korzystając z właściwej kontrolki (np. użyj kontrolki CalendarDatePicker zamiast TextBox do wpisywania dat kalendarzowych). Zobacz więcej na temat wybierania odpowiednich kontrolek wejściowych w formularzu w sekcji Kontrolki wejściowe później.
  • W przypadku korzystania z kontrolek TextBox podaj użytkownikom wskazówkę żądanego formatu wejściowego z właściwością PlaceholderText .
  • Zapewnij użytkownikom odpowiednią klawiaturę na ekranie, stwierdzając oczekiwane dane wejściowe kontrolki z właściwością InputScope .
  • Oznacz wymagane dane wejściowe gwiazdką * na etykiecie.
  • Wyłącz przycisk Prześlij do momentu wypełnienia wszystkich wymaganych informacji.
  • Jeśli podczas przesyłania są nieprawidłowe dane, oznacz kontrolki nieprawidłowymi danymi wejściowymi z wyróżnionymi polami lub obramowaniami i wymagają od użytkownika ponownego przesłania formularza.
  • W przypadku innych błędów, takich jak nieudane połączenie sieciowe, upewnij się, że użytkownik wyświetli odpowiedni komunikat o błędzie.

Układ

Aby ułatwić środowisko użytkownika i upewnić się, że użytkownicy mogą wprowadzić poprawne dane wejściowe, należy wziąć pod uwagę następujące zalecenia dotyczące projektowania układów formularzy.

Etykiety

Etykiety powinny być wyrównane do lewej i umieszczone nad kontrolką wprowadzania. Wiele kontrolek ma wbudowaną właściwość Nagłówek, aby wyświetlić tekst etykiety. W przypadku kontrolek, które nie mają właściwości Header lub do etykietowania grup kontrolek, możesz zamiast tego użyć kontrolki TextBlock .

Aby zaprojektować ułatwienia dostępu, oznacz wszystkie poszczególne kontrolki i grupy kontrolek w celu uzyskania jasności zarówno dla czytników ludzkich, jak i czytników zawartości ekranu.

W przypadku stylów czcionek użyj domyślnej rampy typu systemu Windows. Użyj TitleTextBlockStyle do tytułów stron, SubtitleTextBlockStyle do nagłówków grup i BodyTextBlockStyle do etykiet kontrolek.

ZróbNie
formularz z etykietami u góry formularz z etykietami po lewej stronie nie działa

Spacing

Aby wizualnie oddzielić grupy kontrolek od siebie, użyj wyrównania, marginesów i wypełnienia. Poszczególne kontrolki wejściowe mają wysokość 80 pikseli i powinny być rozdzielone odstępami 24 pikseli. Grupy kontrolek wejściowych powinny być rozmieszczone w odstępach 48 px.

grupy formularzy

Kolumny

Tworzenie kolumn może zmniejszyć niepotrzebne odstępy w formularzach, szczególnie w przypadku większych rozmiarów ekranu. Jeśli jednak chcesz utworzyć formularz wielokolumny, liczba kolumn powinna zależeć od liczby kontrolek wejściowych na stronie i rozmiaru ekranu okna aplikacji. Zamiast przeciążać ekran wieloma kontrolkami wejściowymi, rozważ utworzenie wielu stron dla formularza.

ZróbNie
formularz z 2 kolumnami formularz z 2 nieprawidłowymi kolumnami
formularz z 3 kolumnami

Układ dynamiczny

Rozmiar formularza powinien zmieniać się w miarę zmiany rozmiaru ekranu lub okna, aby użytkownicy nie pomijali żadnych pól wejściowych. Aby uzyskać więcej informacji, zobacz dynamiczne techniki projektowania. Na przykład możesz zachować określone regiony formularza zawsze w widoku, niezależnie od rozmiaru ekranu.

fokus formularzy

Znaczki tabulacji

Użytkownicy mogą używać klawiatury do nawigowania po kontrolkach z zatrzymanymi tabulatorami. Domyślnie kolejność tabulatorów kontrolek odzwierciedla kolejność, w jakiej są tworzone w języku XAML. Aby zastąpić zachowanie domyślne, zmień właściwości IsTabStop lub TabIndex kontrolki.

fokus tabulacji na kontrolce w formularzu

Kontrolka Input

Kontrolki wejściowe to elementy interfejsu użytkownika, które umożliwiają użytkownikom wprowadzanie informacji do formularzy. Poniżej wymieniono niektóre typowe kontrolki, które można dodać do formularzy, a także informacje o tym, kiedy ich używać.

Wprowadzanie tekstu

Kontrola Użyj Example
Pole tekstowe Przechwytywanie jednego lub wielu wierszy tekstu Nazwy, bezpłatne odpowiedzi na formularze lub opinie
Skrzynka na hasła Zbieranie danych prywatnych przez ukrycie znaków Hasła, numery ubezpieczenia społecznego (SSN), numery PIN, informacje o karcie kredytowej
AutosuggestBox Pokaż użytkownikom listę sugestii z odpowiedniego zestawu danych w miarę ich wpisywania Wyszukiwanie w bazie danych, wiersz adresata ("Do:") w poczcie, poprzednie zapytania
RichEditBox (Pole Bogate Edycji) Edytowanie plików tekstowych przy użyciu sformatowanego tekstu, hiperlinków i obrazów Przekazywanie pliku, podglądu i edytowania w aplikacji

Selekcja

Kontrola Użyj Example
Pole wyboru Zaznacz lub usuń zaznaczenie co najmniej jednego elementu akcji Zaakceptuj warunki i postanowienia, dodaj opcjonalne elementy, zaznacz wszystkie, które mają zastosowanie
Przycisk radiowy Wybierz jedną opcję z co najmniej dwóch opcji Wybierz typ, metodę wysyłkową itp.
Przełącznik Wybierz jedną z dwóch wzajemnie wykluczających się opcji Włączone/wyłączone

Uwaga: jeśli istnieje co najmniej pięć elementów zaznaczenia, użyj kontrolki listy.

Lists

Kontrola Użyj Example
Lista rozwijana Rozpocznij w stanie kompaktowym i rozwiń, aby wyświetlić listę elementów, które można wybrać Wybierz z długiej listy elementów, takich jak stany lub kraje/regiony
Widok listy Kategoryzowanie elementów i przypisywanie nagłówków grup, przeciąganie i upuszczanie elementów, kuratela treści i zmiana kolejności elementów. Opcje rangi
GridView Rozmieszczanie i przeglądanie kolekcji opartych na obrazach Wybierz zdjęcie, kolor, motyw wyświetlania

Dane wejściowe liczbowe

Kontrola Użyj Example
suwaka Wybierz liczbę z zakresu ciągłych wartości liczbowych Wartości procentowe, głośność, szybkość odtwarzania
Ocena Oceń za pomocą gwiazdek Opinie klientów

Data i godzina

Kontrola Użyj
Widok kalendarza Wybierz jedną datę lub zakres dat z zawsze widocznego kalendarza
CalendarDatePicker Wybierz jedną datę z kalendarza kontekstowego
DatePicker Wybierz jedną zlokalizowaną datę, gdy informacje kontekstowe nie są ważne
TimePicker Wybierz pojedynczą wartość czasu

Dodatkowe kontrolki

Aby uzyskać pełną listę kontrolek platformy UWP, zobacz indeks kontrolek według funkcji.

Aby uzyskać bardziej złożone i niestandardowe kontrolki interfejsu użytkownika, zapoznaj się z zasobami dostępnymi w firmach, takich jak Telerik, SyncFusion, DevExpress, Infragistics, ComponentOne i ActiPro.

Przykład formularza z jedną kolumną

W tym przykładzie użyto akrylowego widoku listy i listy szczegółów oraz kontrolki NavigationView. Zrzut ekranu przedstawiający inny przykład formularza

<StackPanel>
    <TextBlock Text="New Customer" Style="{StaticResource TitleTextBlockStyle}"/>
    <Button Height="100" Width="100" Background="LightGray" Content="Add photo" Margin="0,24" Click="AddPhotoButton_Click"/>
    <TextBox x:Name="Name" Header= "Name" Margin="0,24,0,0" MaxLength="32" Width="400" HorizontalAlignment="Left" InputScope="PersonalFullName"/>
    <TextBox x:Name="PhoneNumber" Header="Phone Number" Margin="0,24,0,0" MaxLength="15" Width="400" HorizontalAlignment="Left" InputScope="TelephoneNumber" />
    <TextBox x:Name="Email" Header="Email" Margin="0,24,0,0" MaxLength="50" Width="400" HorizontalAlignment="Left" InputScope="EmailNameOrAddress" />
    <TextBox x:Name="Address" Header="Address" PlaceholderText="Address" Margin="0,24,0,0" MaxLength="50" Width="400" HorizontalAlignment="Left" InputScope="EmailNameOrAddress" />
    <TextBox x:Name="Address2" Margin="0,24,0,0" PlaceholderText="Address 2" MaxLength="50" Width="400" HorizontalAlignment="Left" InputScope="EmailNameOrAddress" />
    <RelativePanel>
        <TextBox x:Name="City" PlaceholderText="City" Margin="0,24,0,0" MaxLength="50" Width="200" HorizontalAlignment="Left" InputScope="EmailNameOrAddress" />
        <ComboBox x:Name="State" PlaceholderText="State" Margin="24,24,0,0"  Width="100" RelativePanel.RightOf="City">
             <x:String>WA</x:String>
        </ComboBox>
    </RelativePanel>
    <TextBox x:Name="ZipCode" PlaceholderText="Zip Code" Margin="0,24,0,0" MaxLength="6" Width="100" HorizontalAlignment="Left" InputScope="Number" />
    <StackPanel Orientation="Horizontal">
        <Button Content="Save" Margin="0,24" Click="SaveButton_Click"/>
        <Button Content="Cancel" Margin="24" Click="CancelButton_Click"/>
    </StackPanel>  
</StackPanel>

Przykład formularza z dwiema kolumnami

W tym przykładzie użyto kontrolki Pivot, tła Acrylic i CommandBar oprócz kontrolek wejściowych. Zrzut ekranu przedstawiający przykład formularza

<Grid>
    <Pivot Background="{ThemeResource SystemControlAccentAcrylicWindowAccentMediumHighBrush}" >
        <Pivot.TitleTemplate>
            <DataTemplate>
                <Grid>
                    <TextBlock Text="Company Name" Style="{ThemeResource HeaderTextBlockStyle}"/>
                </Grid>
            </DataTemplate>
        </Pivot.TitleTemplate>
        <PivotItem Header="Orders" Margin="0"/>    
        <PivotItem Header="Customers" Margin="0">
            <!--Form Example-->
            <Grid Background="White">
                <RelativePanel>
                    <StackPanel x:Name="Customer" Margin="20">
                        <TextBox x:Name="CustomerName" Header= "Customer Name" Margin="0,24,0,0" MaxLength="320" Width="400" HorizontalAlignment="Left" InputScope="PersonalFullName"/>
                        <TextBox x:Name="CustomerPhoneNumber" Header="Phone Number" Margin="0,24,0,0" MaxLength="50" Width="400" HorizontalAlignment="Left" InputScope="TelephoneNumber" />
                        <TextBox x:Name="Address" Header="Address" PlaceholderText="Address" Margin="0,24,0,0" MaxLength="50" Width="400" HorizontalAlignment="Left" InputScope="AlphanumericFullWidth" />
                        <TextBox x:Name="Address2" Margin="0,24,0,0" PlaceholderText="Address 2" MaxLength="50" Width="400" HorizontalAlignment="Left" InputScope="AlphanumericFullWidth" />
                        <RelativePanel>
                            <TextBox x:Name="City" PlaceholderText="City" Margin="0,24,0,0" MaxLength="50" Width="200" HorizontalAlignment="Left" InputScope="Text" />
                            <ComboBox x:Name="State" PlaceholderText="State" Margin="24,24,0,0"  Width="100" RelativePanel.RightOf="City">
                                <x:String>WA</x:String>
                            </ComboBox>
                        </RelativePanel>
                        <TextBox x:Name="ZipCode" PlaceholderText="Zip Code" Margin="0,24,0,0" MaxLength="6" Width="100" HorizontalAlignment="Left" InputScope="Number" />
                    </StackPanel>
                    <StackPanel x:Name="Associate" Margin="20" RelativePanel.RightOf="Customer">
                        <TextBox x:Name="AssociateName" Header= "Associate" Margin="0,24,0,0" MaxLength="320" Width="400" HorizontalAlignment="Left" InputScope="PersonalFullName"/>
                        <TextBox x:Name="AssociatePhoneNumber" Header="Phone Number" Margin="0,24,0,0" MaxLength="50" Width="400" HorizontalAlignment="Left" InputScope="TelephoneNumber" />
                        <DatePicker x:Name="TargetInstallDate" Header="Target install Date" HorizontalAlignment="Left" Margin="0,24,0,0"></DatePicker>
                        <TimePicker x:Name="InstallTime" Header="Install Time" HorizontalAlignment="Left" Margin="0,24,0,0"></TimePicker>
                    </StackPanel>
                </RelativePanel>
            </Grid>
        </PivotItem>
        <PivotItem Header="Invoices"/>
        <PivotItem Header="Stock"/>
        <Pivot.RightHeader>
            <CommandBar OverflowButtonVisibility="Collapsed" Background="Transparent">
                <AppBarButton Icon="Add"/>
                <AppBarSeparator/>
                <AppBarButton Icon="Edit" />
                <AppBarButton Icon="Delete"/>
                <AppBarSeparator/>
                <AppBarButton Icon="Save"/>
            </CommandBar>
        </Pivot.RightHeader>
    </Pivot>
</Grid>

Przykład bazy danych zamówień klientów

Zrzut ekranu bazy danych zamówień klientów Aby dowiedzieć się, jak połączyć dane wejściowe formularza z bazą danych platformy Azure i wyświetlić w pełni zaimplementowany formularz, zobacz przykładową aplikację Customers Orders Database .