O atributo de propriedade de conteúdo
O arquivo XAML no programa ScaryColorList é realmente um pouco mais do que ele precisa ser. você pode eliminar as labels ContentPage.Content, todas as tags StackLayout.Children, e todas as tag Frame.Content, e o programa irá funcionar da mesma forma:
Parece muito mais limpo agora. O único elemento de propriedade esquerda é para a propriedade Padding de ContentPage.
Tal como acontece com quase toda sintaxe XAML, esta eliminação de alguns elementos de propriedade é apoiada pelas classes subjacentes. Em cada classe usado em XAML é permitido definir uma propriedade como uma propriedade content (às vezes também chamado de propriedade padrão da classe). Para esta propriedade de conteúdo, as tags do elemento não são necessárias, e qualquer conteúdo XML dentro das tags de início e fim é automaticamente atribuído a esta propriedade. Muito convenientemente, a propriedade do conteúdo é Content ContentPage, a propriedade de conteúdo de StackLayout é Children, e a propriedade de conteúdo do Frame é content.
Estas propriedades de conteúdo são documentadas, mas você precisa saber para onde olhar. Uma classe específica é propriedade de conteúdo usando o ContentPropertyAttribute. Se esse atributo está ligado a uma classe, ele aparece na documentação on-line Xamarin.Forms API, juntamente com a declaração de classe. É assim que aparece na documentação para ContentPage:
[Xamarin.Forms.ContentProperty("Content")] public class ContentPage : Page
Se ler em voz alta, soa um pouco redundante: A propriedade Content é a propriedade de conteúdo de ContentPage.
A declaração para a classe Frame é semelhante:
[Xamarin.Forms.ContentProperty("Content")] public class Frame : ContentView
StackLayout não tem um atributo ContentProperty aplicado, mas StackLayout deriva de Layout<View>, e Layout<T> tem um atributo ContentProperty:
[Xamarin.Forms.ContentProperty("Children")]
public abstract class Layout<T> : Layout, IViewContainer<T> where T : Xamarin.Forms.View
O atributo ContentProperty é herdado pelas classes que derivam de Layout <T>, então Children é a propriedade de conteúdo de StackLayout.
Certamente, não há nenhum problema se você incluir os elementos de propriedade quando não são necessários, mas na maioria dos casos, eles não serão mais exibidos nos programas de exemplo deste livro.