Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
Este livro foi publicado na primavera de 2016 e não foi atualizado desde então. Há muito no livro que permanece valioso, mas parte do material está desatualizado e alguns tópicos não estão mais totalmente corretos ou completos.
Este capítulo explora o XAML mais profundamente e, particularmente, como o código e o XAML interagem.
Passar argumentos
No caso geral, uma classe instanciada em XAML deve ter um construtor público sem parâmetros; O objeto resultante é inicializado por meio de configurações de propriedade. No entanto, há duas outras maneiras pelas quais os objetos podem ser instanciados e inicializados.
Embora essas sejam técnicas de uso geral, elas são usadas principalmente em conexão com modelos de exibição MVVM.
Construtores com argumentos
O exemplo ParameteredConstructorDemo demonstra como usar a marca para especificar argumentos do x:Arguments construtor. Esses argumentos devem ser delimitados por tags de elemento que indicam o tipo do argumento. Para os tipos de dados básicos do .NET, as seguintes marcas estão disponíveis:
x:Objectx:Booleanx:Bytex:Int16x:Int32x:Int64x:Singlex:Doublex:Decimalx:Charx:Stringx:TimeSpanx:Arrayx:DateTime
Posso chamar métodos de XAML?
O exemplo FactoryMethodDemo demonstra como usar o x:FactoryMethod elemento para especificar um método de fábrica que é invocado para criar um objeto. Esse método de fábrica deve ser público e estático e deve criar um objeto do tipo no qual ele é definido. (Por exemplo, o Color.FromRgb método se qualifica porque é público e estático e retorna um valor do tipo Color.) Os argumentos para o método de fábrica são especificados em x:Arguments tags.
O atributo x:Name
O x:Name atributo permite que um objeto instanciado em XAML receba um nome. As regras para esses nomes são as mesmas que para nomes de variáveis C#. Após o InitializeComponent retorno da chamada no construtor, o arquivo code-behind pode se referir a esses nomes para acessar o elemento XAML correspondente. Os nomes são realmente convertidos pelo analisador XAML em campos privados na classe parcial gerada.
O exemplo XamlClock demonstra o uso de x:Name para permitir que o arquivo code-behind mantenha dois Label elementos definidos em XAML atualizados com a data e hora atuais.
O mesmo nome não pode ser usado para vários elementos na mesma página. Esse é um problema específico se você usar OnPlatform para criar objetos nomeados paralelos para cada plataforma. O exemplo PlatformSpecificLabele demonstra uma maneira melhor de fazer algo assim.
Exibições personalizadas baseadas em XAML
Há várias maneiras de evitar a repetição de marcação em XAML. Uma técnica comum é criar uma nova classe baseada em XAML que deriva de ContentView. Essa técnica é demonstrada no exemplo ColorViewList . A ColorView classe deriva de ContentView para exibir uma cor específica e seu nome, enquanto a classe deriva ColorViewListPage de ContentPage como de costume e cria explicitamente 17 instâncias de ColorView.
Acessar a ColorView classe em XAML requer outra declaração de namespace XML, comumente nomeada local para classes no mesmo assembly.
Eventos e manipuladores
Os eventos podem ser atribuídos a manipuladores de eventos em XAML, mas o próprio manipulador de eventos deve ser implementado no arquivo code-behind. O XamlKeypad demonstra como criar uma interface do usuário de teclado em XAML e como implementar os Clicked manipuladores no arquivo code-behind.
Gestos de toque
Qualquer View objeto pode obter entrada de toque e gerar eventos a partir dessa entrada. A View classe define uma GestureRecognizers propriedade de coleção que pode conter uma ou mais instâncias de classes derivadas de GestureRecognizer.
O TapGestureRecognizer gera Tapped eventos. O programa MonkeyTap demonstra como anexar TapGestureRecognizer objetos a quatro BoxView elementos para criar um jogo de imitação:
Mas o programa MonkeyTap realmente precisa de som. (Veja o próximo capítulo.)
