Compartilhar via


Formulários

Um formulário é um grupo de controles que coleta e envia dados de usuários. Os formulários normalmente são usados para páginas de configurações, pesquisas, criação de contas e muito mais.

Este artigo discute as diretrizes de design para a criação de layouts XAML para formulários.

Exemplo de formulário

Quando você deve usar um formulário?

Um formulário é uma página dedicada para coletar entradas de dados que estão claramente relacionadas entre si. Você deve usar um formulário quando precisar coletar dados explicitamente de um usuário. Você pode criar um formulário para um usuário:

  • Fazer logon em uma conta
  • Inscrever-se para uma conta
  • Alterar as configurações do aplicativo, como opções de privacidade ou exibição
  • Fazer uma pesquisa
  • Comprar um item
  • Fornecer comentários

Tipos de formulários

Ao pensar em como a entrada do usuário é enviada e exibida, há dois tipos de formulários:

1. Atualização instantânea

página de configurações

Use um formulário de atualização instantânea quando quiser que os usuários vejam imediatamente os resultados da alteração dos valores no formulário. Por exemplo, nas páginas de configurações, as seleções atuais são exibidas e todas as alterações feitas nas seleções são aplicadas imediatamente. Para reconhecer as alterações em seu aplicativo, você precisará adicionar um manipulador de eventos a cada controle de entrada. Se um usuário alterar um controle de entrada, o aplicativo poderá responder adequadamente.

2. Enviar com o botão

O outro tipo de formulário permite que o usuário escolha quando enviar dados com um clique de um botão.

página de adicionar novo evento ao calendário

Esse tipo de formulário oferece ao usuário flexibilidade para responder. Normalmente, esse tipo de formulário contém mais campos de entrada de formulário livre e, portanto, recebe uma maior variedade de respostas. Para garantir a entrada válida do usuário e os dados formatados corretamente após o envio, considere as seguintes recomendações:

  • Impossibilitar o envio de informações inválidas usando o controle correto (ou seja, use um CalendarDatePicker em vez de um TextBox para datas de calendário). Veja mais sobre como selecionar os controles de entrada apropriados em seu formulário na seção Controles de Entrada posteriormente.
  • Ao usar controles TextBox, forneça aos usuários uma dica do formato de entrada desejado com a propriedade PlaceholderText .
  • Forneça aos usuários o teclado local apropriado informando a entrada esperada de um controle com a propriedade InputScope .
  • Marque a entrada necessária com um asterisco * no rótulo.
  • Desabilite o botão Enviar até que todas as informações necessárias sejam preenchidas.
  • Se houver dados inválidos no envio, marque os controles com entrada inválida com campos ou bordas realçadas e exija que o usuário reenvie o formulário.
  • Para outros erros, como falha na conexão de rede, certifique-se de exibir uma mensagem de erro apropriada para o usuário.

Layout

Para facilitar a experiência do usuário e garantir que os usuários possam inserir a entrada correta, considere as recomendações a seguir para criar layouts para formulários.

Rótulos

Os rótulos devem ser alinhados à esquerda e colocados acima do controle de entrada. Muitos controles têm uma propriedade de cabeçalho integrada para exibir o rótulo. Para controles que não têm uma propriedade Header ou para rotular grupos de controles, você pode usar um TextBlock .

Para projetar para acessibilidade, rotule todos os controles, individualmente e em grupo, para garantir clareza tanto para leitores humanos quanto para leitores de tela.

Para estilos de fonte, use a rampa de tipo padrão do Windows. Use TitleTextBlockStyle para títulos de página, SubtitleTextBlockStyle para títulos de grupo e BodyTextBlockStyle para rótulos de controle.

FazerNão
formulário com rótulos principais formulário com rótulos à esquerda não

Spacing

Para separar visualmente grupos de controles uns dos outros, use alinhamento, margens e preenchimento. Os controles de entrada individuais têm 80px de altura e devem ser espaçados a 24px de distância. Grupos de controles de entrada devem ser espaçados com 48px de distância.

grupos de formulários

Columns

A criação de colunas pode reduzir o espaço em branco desnecessário em formulários, especialmente com tamanhos de tela maiores. No entanto, se você quiser criar um formulário de várias colunas, o número de colunas deverá depender do número de controles de entrada na página e do tamanho da tela da janela do aplicativo. Em vez de sobrecarregar a tela com vários controles de entrada, considere criar várias páginas para seu formulário.

FazerNão
formulário com 2 colunas formulário com 2 colunas incorretas
formulário com 3 colunas

Layout responsivo

Os formulários devem redimensionar conforme o tamanho da tela ou da janela é alterado, para que os usuários não ignorem nenhum campo de entrada. Para obter mais informações, consulte técnicas de design responsivo. Por exemplo, talvez você queira manter regiões específicas do formulário sempre em exibição, independentemente do tamanho da tela.

foco de formulários

Paradas de tabulação

Os usuários podem usar o teclado para navegar pelos controles com paradas de tabulação. Por padrão, a ordem de tabulação dos controles reflete a ordem na qual eles são criados no XAML. Para substituir o comportamento padrão, altere as propriedades IsTabStop ou TabIndex do controle.

navegação por tab no controle do formulário

Controles de entrada

Os controles de entrada são os elementos de interface do usuário que permitem que os usuários insiram informações em formulários. Alguns controles comuns que podem ser adicionados aos formulários são listados abaixo, bem como informações sobre quando usá-los.

Entrada de texto

Controle Utilização Example
TextBox Capturar uma ou várias linhas de texto Nomes, respostas de formulário livre ou comentários
Caixa de senha Coletar dados privados ocultando os caracteres Senhas, SSN (Números de Previdência Social), PINs, informações de cartão de crédito
Caixa de Sugestão Automática Mostrar aos usuários uma lista de sugestões de um conjunto de dados correspondente à medida que eles digitam Pesquisa de banco de dados, email para: linha, consultas anteriores
Caixa de edição rica Editar arquivos de texto com texto formatado, hiperlinks e imagens Carregar arquivo, visualizar e editar no aplicativo

Seleção

Controle Utilização Example
Caixa de Seleção Selecionar ou desmarcar um ou mais itens de ação Concorde com termos e condições, adicione itens opcionais, selecione todos os aplicáveis
RadioButton Selecione uma opção entre duas ou mais opções Selecione o tipo, método de envio etc.
ToggleSwitch Escolha uma das duas opções mutuamente exclusivas Ativar/desativar

Observação: se houver cinco ou mais itens de seleção, use um controle de lista.

Lists

Controle Utilização Example
ComboBox Iniciar em estado compacto e expandir para mostrar a lista de itens selecionáveis Selecione em uma longa lista de itens, como estados ou países/regiões
ListView Categorizar itens e atribuir cabeçalhos de grupo, arrastar e soltar itens, coletar conteúdo e reordenar itens Opções de classificação
GridView Organizar e procurar coleções baseadas em imagem Escolher uma foto, cor, exibir tema

Entrada numérica

Controle Utilização Example
Controle deslizante Selecione um número de um intervalo de valores numéricos contíguos Porcentagens, volume, velocidade de reprodução
Classificação Avaliar com estrelas Comentários do cliente

Data e hora

Controle Utilização
CalendarView Escolher uma única data ou um intervalo de datas de um calendário sempre visível
CalendarDatePicker Escolher uma única data de um calendário contextual
DatePicker Escolha uma única data localizada quando informações contextuais não forem importantes
TimePicker Escolher um único valor de hora

Controles adicionais

Para obter uma lista completa de controles UWP, consulte o índice de controles por função.

Para controles de interface do usuário mais complexos e personalizados, examine os recursos disponíveis de empresas como Telerik, SyncFusion, DevExpress, Infragistics, ComponentOne e ActiPro.

Exemplo de formulário de uma coluna

Este exemplo usa uma exibição de lista acrílico/lista de detalhes e controle NavigationView. Captura de tela de outro exemplo de formulário

<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>

Exemplo de formulário de duas colunas

Este exemplo usa o controle Pivot, o fundo Acrílico e o CommandBar, além dos controles de entrada. Captura de tela do exemplo de formulário

<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>

Exemplo de banco de dados de pedidos do cliente

captura de tela do banco de dados de pedidos do cliente Para saber como conectar a entrada de formulário a um banco de dados do Azure e ver um formulário totalmente implementado, consulte o exemplo de aplicativo Banco de Dados de Pedidos de Clientes .