Ci sono alcuni buoni esempi già di come creare un "controllo personalizzato" di -Xamarin.Forms UserControl utilizzando XAML e renderer personalizzato
- Derivazione di una classe da vista o da un esistente built-in di controllo e poi creando un renderizzatore personalizzato per essa per piattaforma.
- http://blog.xamarin.com/using-custom-controls-in-xamarin.forms-on-android/
- http://developer.xamarin.com/guides/cross-platform/xamarin-forms/custom-renderer/
Voglio creare un "controllo personalizzato composto o UserControl", che contiene più elementi che sono definiti in XAML (nel codice comune), e poi personalizzati con un renderer (per dire aggiustare lo stile per piattaforma).
Qualcuno ha un esempio di fare questo favore? Un semplice esempio con una vista che ha un'etichetta collegabile e una casella di immissione dovrebbe essere sufficiente per mostrare i principi principali.
Ecco quello che ho finora -
definito un contentView per rappresentare il nostro layout usercontrols e contenuto.
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="News.Forms.VisualNewsContentView">
<ContentView.Content>
<StackLayout>
<Label x:Name="MyLabel" Text="Label"></Label>
<Entry x:Name="MyEntry" Text="Entry"></Entry>
</StackLayout>
</ContentView.Content>
</ContentView>
con codebehind -
public partial class VisualNewsContentView : ContentView
{
public VisualNewsContentView()
{
InitializeComponent();
}
// Not sure if I need this to access Entry ...
public Entry GetEntry()
{
return MyEntry;
}
}
Aggiungi un Android personalizzato renderer per questo contentView, come faccio ad accedere e personalizzare in modo nativo parti/controlli del contentView?
[assembly:ExportRenderer (typeof(VisualNewsContentView), typeof(VisualNewsRenderer))]
namespace News.Forms.Android
{
public class VisualNewsRenderer: ViewRenderer
{
public VisualNewsRenderer() { }
protected override void OnModelChanged (VisualElement oldModel, VisualElement newModel)
{
base.OnModelChanged (oldModel, newModel);
if (newModel != null) {
VisualNewsContentView newsContentView = newModel as VisualNewsContentView;
// i.e. How could I get hold of EditText etc so I could natively customise its appearance? When you use a built in renderer like EntryRenderer you can use Control to access native control.
Console.WriteLine (newsContentView.GetLabel().Text);
EditText ed = (EditText)newsContentView.GetEntry().???
}
}
}
}
Proprio non riesco a ottenere insieme i pezzi per lavorare, il contentView sembra rendere bene su pagina, ma non riesce a capire come accedere alle sue controlli nativi bambino nel viewrenderer.
Sii gentile per mostrare anche come è possibile utilizzare rilegatura per il Label e I valori di testo ingresso.
Io non voglio avere a definire un renderer personalizzato per ogni singola etichetta/ingresso etc di UserControl.
Ciao @Bart, grazie per la risposta, scusate se non ero chiaro, ma ho bisogno di accedere al controllo/visualizzazione nativo di Android (cioè EditText), così ho potuto fare personalizzazioni native che non potevo fare direttamente con proprietà Forms. – WickedW
@WickedW Ho modificato la mia risposta, ma non so se sia possibile mappare gli elementi Form a quelli nativi. – Bart
Grazie a @Bart, sembra che sia possibile personalizzare a un livello di controllo/visualizzazione OPPURE prendere in carico l'intera pagina/uicontroller e personalizzare fornendo OPPURE un approccio "ibrido" come suggerito. Qualcuno del team di Xamarin Forms si preoccuperebbe di commentare se possono/prevedono di consentirci di ottenere controlli su un controllo utente per la personalizzazione? – WickedW