Partilhar via


Demonstra Passo a passo: Construindo um aplicativo WPF simples com o WPF designer

Essa explicação passo a passo mostra como construir um aplicativo simples com o WPF Designer Windows Presentation Foundation (WPF).

Nesta explicação passo a passo, você executa as seguintes tarefas:

  • Criar o projeto.

  • Criar o layout.

  • Adicionar controles ao layout

  • Definir propriedades relacionados com layout.

  • Para criar uma fonte de dados.

  • Conectar-se a um fonte de dados.

  • Ligar as propriedades de controle.

Quando você terminar, você terá um aplicativo simples que permite que você procure o sistema de arquivos.Interface do usuário do seu aplicativo será implementada em Extensible Application Markup Language (XAML).Para obter mais informações, consulte XAML.A ilustração a seguir mostra como o aplicativo será exibido.

Observação:

As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Para alterar as configurações, escolher Importar e exportar configurações on the Ferramentas menu.Para obter mais informações, consulte Configurações do Visual Studio.

Pré-requisitos

Para completar este passo a passo, são necessários os seguintes componentes:

  • Visual Studio 2008.

Criando o projeto

A primeira etapa é criar um projeto para a aplicação.

Para criar o projeto

  1. Criar um novo projeto de Aplicativo WPF em Visual Basic ou Visual C# chamado FolderExplorer .Para obter mais informações, consulte Como: Criar um novo projeto de aplicativo do WPF.

    Window1.xaml é aberto no WPF Designer.

  2. No modo Design, selecione .Para obter mais informações, consulte Como: Selecionar e mover elementos na área de design.

  3. Na janela Propriedades, defina o valor da propriedade Title a FolderExplorer.

Criando o Layout

O layout define como os controles estão organizados na janela principal do seu aplicativo.As seguintes etapas mostram como construir elementos de layout que conterão os controles do aplicativo.

Para criar o layout

  1. Selecione a Grid controle raiz na janela.

  2. Adicione uma segunda linha para a grade.Para obter mais informações, consulte Como: Adicionar linhas e colunas a uma grade.

  3. Adicione uma segunda coluna para a grade.

Adicionando Controles ao Layout

Com o layout definido, você pode preenchê-lo com controles.Basta clicar no controle desejado no Caixa de ferramentas e arrastar-o para a área de design.

Para adicionar controles ao layout

  1. Da Caixa de Ferramentas,arraste um controle TreeView na primeira célula da grade.Redimensione o controle conforme necessário.

  2. Da Caixa de Ferramentas,arraste um controle ListView para a célula ocupando a primeira linha e segunda coluna da grade.Redimensione o controle conforme necessário.

  3. Da Caixa de Ferramentas,arraste um controle ListView para a célula ocupando a segunda linha e segunda coluna da grade.Redimensione o controle conforme necessário.

Definindo Propriedades Layout-Relacionados

As etapas a seguir mostram como para configurar as propriedades relacionadas com layout de controles.Como você define as propriedades em cada controle, o layout será semelhante ao aplicativo final.

Definir propriedades relacionados com layout.

  1. Selecione o controle TreeView.

  2. Na janela Propriedades, defina as propriedades a seguir como mostrado.

    Propriedade

    Valor

    Grid.ColumnSpan

    1

    Grid.RowSpan

    2

    Height

    Auto

    HorizontalAlignment

    Stretch

    Margin

    0,0,0,0

    VerticalAlignment

    Stretch

    Width

    Auto

    O TreeView controle será redimensionado para ajustar na primeira coluna da grade e para estender dua linhas da grade.

  3. selecionar os dois ListView controles.

  4. Na janela Propriedades, defina as propriedades a seguir como mostrado.

    Propriedade

    Valor

    Grid.ColumnSpan

    1

    Grid.RowSpan

    1

    Height

    Auto

    HorizontalAlignment

    Stretch

    Margin

    0,0,0,0

    VerticalAlignment

    Stretch

    Width

    Auto

    Os controles ListView redimensionar para caber em suas respectivas células grade.

  5. No Estrutura de tópicos de documento janela, expandir o ColumnDefinitions nó de grade.Para obter mais informações, consulte Navegando na Hierarquia do Elemento de um documento WPF.

  6. selecionar a primeira ColumnDefinition item.

  7. No Propriedades janela, conjunto a propriedade Width como *.

  8. No Estrutura de tópicos de documento janela, selecionar o segundo ColumnDefinition.

  9. No Propriedades janela, conjunto a propriedade Width como 2 *.

    As colunas são redimensionadas com a primeira coluna, levando a um terço da largura da janela e a segunda coluna dê dois terços.

  10. No Estrutura de tópicos de documento janela, expandir o RowDefinitions nó de grade.

  11. selecionar a primeira RowDefinition item.

  12. No Propriedades janela, defina a propriedade Height como *.

  13. No Estrutura de tópicos de documento janela, selecionar o segundo RowDefinition.

  14. No Propriedades janela, defina a propriedade Height como *.

    As linhas são redimensionados para ocupem altura metade da janela de.

  15. Criar e executar o projeto.

  16. Redimensionar a janela para ver o TreeView e ListView controles de redimensionamento dinamicamente.

Criando uma Fonte de Dados

O fonte de dados para o aplicativo FolderExplorer é uma classe denominada Folder.Essa classe fornece um modelo simples do sistema de arquivo.Cada instância Folder possui um SubFolders e uma coleção Files.

Para criar uma fonte de dados

  1. Adicione uma nova classe denominada Pasta para o projeto FolderExplorer.Para obter mais informações, consulte Como: Itens de Adicionar Novo Projeto.

  2. Substitua o conteúdo da pasta do arquivo código-fonte pelo código a seguir.

    Imports System
    Imports System.IO
    Imports System.Linq
    Imports System.Collections.Generic
    Imports System.Collections.ObjectModel
    Imports System.Text
    
    Public Class Folder
        Private _folder As DirectoryInfo
        Private _subFolders As ObservableCollection(Of Folder)
        Private _files As ObservableCollection(Of FileInfo)
    
        Public Sub New() 
            Me.FullPath = "c:\"
    
        End Sub 'New
    
    
        Public ReadOnly Property Name() As String 
            Get
                Return Me._folder.Name
            End Get
        End Property
    
    
        Public Property FullPath() As String 
            Get
                Return Me._folder.FullName
            End Get
    
            Set
                If Directory.Exists(value) Then
                    Me._folder = New DirectoryInfo(value)
                Else
                    Throw New ArgumentException("must exist", "fullPath")
                End If
            End Set
        End Property
    
        ReadOnly Property Files() As ObservableCollection(Of FileInfo)
            Get
                If Me._files Is Nothing Then
                    Me._files = New ObservableCollection(Of FileInfo)
    
                    Dim fi As FileInfo() = Me._folder.GetFiles()
    
                    Dim i As Integer
                    For i = 0 To fi.Length - 1
                        Me._files.Add(fi(i))
                    Next i
                End If
    
                Return Me._files
            End Get
        End Property
    
        ReadOnly Property SubFolders() As ObservableCollection(Of Folder)
    
            Get
                If Me._subFolders Is Nothing Then
                    Try
    
                    Me._subFolders = New ObservableCollection(Of Folder)
    
                        Dim di As DirectoryInfo() = Me._folder.GetDirectories()
    
                        Dim i As Integer
                        For i = 0 To di.Length - 1
                            Dim newFolder As New Folder()
                            newFolder.FullPath = di(i).FullName
                            Me._subFolders.Add(newFolder)
                        Next i
                    Catch ex As Exception
    
                        System.Diagnostics.Trace.WriteLine(ex.Message)
    
                    End Try
                End If
    
                Return Me._subFolders
            End Get
        End Property
    End Class
    
    using System;
    using System.IO;
    using System.Linq;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.Text;
    
    namespace FolderExplorer
    {
        public class Folder
        {
            private DirectoryInfo _folder;
            private ObservableCollection<Folder> _subFolders;
            private ObservableCollection<FileInfo> _files;
    
            public Folder()
            {
                this.FullPath = @"c:\";
            }
    
            public string Name
            {
                get
                {
                    return this._folder.Name;
                }
            }
    
            public string FullPath
            {
                get
                {
                    return this._folder.FullName;
                }
    
                set
                {
                    if (Directory.Exists(value))
                    {
                        this._folder = new DirectoryInfo(value);
                    }
                    else
                    {
                        throw new ArgumentException("must exist", "fullPath");
                    }
                }
            }
    
            public ObservableCollection<FileInfo> Files
            {
                get
                {
                    if (this._files == null)
                    {
                        this._files = new ObservableCollection<FileInfo>();
    
                        FileInfo[] fi = this._folder.GetFiles();
    
                        for (int i = 0; i < fi.Length; i++)
                        {
                            this._files.Add(fi[i]);
                        }
                    }
    
                    return this._files;
                }
            }
    
            public ObservableCollection<Folder> SubFolders
            {
                get
                {
                    if (this._subFolders == null)
                    {
                        this._subFolders = new ObservableCollection<Folder>();
    
                        DirectoryInfo[] di = this._folder.GetDirectories();
    
                        for (int i = 0; i < di.Length; i++)
                        {
                            Folder newFolder = new Folder();
                            newFolder.FullPath = di[i].FullName;
                            this._subFolders.Add(newFolder);
                        }
                    }
    
                    return this._subFolders;
                }
            }
        }
    }
    

Conectando a Fontes de Dados

Os controles WPF estão conectados a fontes de dados por meio associação de dados.O procedimento a seguir mostra como declarar e vincular a um ObjectDataProvider.

Conectar-se a um fonte de dados

  1. Abra Window1.xaml no WPF Designer.

  2. No exibição XAML, insira a marca <Window>, com os outros mapeamentos xmlns o seguinte XAML.Para obter mais informações, consulte Como: Importar um Namespace em XAML.

    xmlns:my="clr-namespace:FolderExplorer"
    
  3. Inserir a seguinte XAML após a marca de abertura <Window>e antes da marca de abertura <Grid> Marca.

       <Window.Resources>
    
            <ObjectDataProvider x:Key="RootFolderDataProvider" >
                <ObjectDataProvider.ObjectInstance>
                    <my:Folder FullPath="c:\"/>
                </ObjectDataProvider.ObjectInstance>
            </ObjectDataProvider>
    
            <HierarchicalDataTemplate 
                DataType    = "{x:Type my:Folder}"
                ItemsSource = "{Binding Path=SubFolders}">
                <TextBlock Text="{Binding Path=Name}" />
            </HierarchicalDataTemplate>
    
        </Window.Resources>
    
    
     <Window.Resources>
    
            <ObjectDataProvider x:Key="RootFolderDataProvider" >
                <ObjectDataProvider.ObjectInstance>
                    <my:Folder FullPath="c:\"/>
                </ObjectDataProvider.ObjectInstance>
            </ObjectDataProvider>
    
            <HierarchicalDataTemplate 
                DataType    = "{x:Type my:Folder}"
                ItemsSource = "{Binding Path=SubFolders}">
                <TextBlock Text="{Binding Path=Name}" />
            </HierarchicalDataTemplate>
    
        </Window.Resources>
    
    
  4. Substitua a marca <TreeView> com o seguinte XAML.

          <TreeView Grid.ColumnSpan="1" Grid.RowSpan="2" Margin="0,0,0,0" Name="treeView1" >
                <TreeViewItem ItemsSource="{Binding Path=SubFolders, Source={StaticResource RootFolderDataProvider}}" Header="Folders"  />
            </TreeView>
    
         <TreeView Grid.ColumnSpan="1" Grid.RowSpan="2" Margin="0,0,0,0" Name="treeView1" >
                <TreeViewItem ItemsSource="{Binding Path=SubFolders, Source={StaticResource RootFolderDataProvider}}" Header="Folders"  />
            </TreeView>
    

Associando Propriedades de Controle

Você pode vincular as propriedades de um controle a outro controle, que permite atualização automática de propriedade.

Ligar as propriedades de controle.

  1. No modo de exibição XAML, substitua ambas as marcas <ListView> com o seguinte XAML.

           <ListView Name="listView1" 
            ItemsSource="{Binding Path=SelectedItem.SubFolders, ElementName=treeView1, Mode=OneWay}" 
            Grid.Column="1" 
            Grid.RowSpan="1" />
    
            <ListView Name="listView2" 
            ItemsSource="{Binding Path=SelectedItem.Files, ElementName=treeView1, Mode=OneWay}" 
            Grid.Column="1" 
            Grid.Row="1" />
    
         <ListView Name="listView1" 
            ItemsSource="{Binding Path=SelectedItem.SubFolders, ElementName=treeView1, Mode=OneWay}" 
            Grid.Column="1" 
            Grid.RowSpan="1" />
    
            <ListView Name="listView2" 
            ItemsSource="{Binding Path=SelectedItem.Files, ElementName=treeView1, Mode=OneWay}" 
            Grid.Column="1" 
            Grid.Row="1" />
    
  2. Criar e executar o projeto.

  3. Expanda o item para abrir o pasta raiz Pastas.Experimente, clicando em subpastas e observando o conteúdo de dois controles ListView.As subpastas são atualizadas no controle superior ListView, e os arquivos são exibidos no controle inferiorListView.

Próximas etapas

Consulte também

Tarefas

Como: Use eventos anexados

Demonstra Passo a passo: Depuração de controles do WPF personalizados em time de design

Conceitos

modo divisão: Exibindo a área de design do WPF e XAML ao mesmo time

Navegando na Hierarquia do Elemento de um documento WPF

Outros recursos

Trabalhar com controles no criador de WPF