Xamarin.Forms is a cross-platform, natively-backed UI toolkit abstraction that allows developers to create user interfaces that can be shared across Android, iOS, and Windows Phone. The user interfaces use the native controls of the target platform.
The user-experience of a Xamarin.Forms application is usually defined in a cross-platform shared project (either a Portable Class Library or a Shared Project) and combined with platform-specific projects that, at the least, initialize the native platform rendering (note the call to Forms.Init() in the platform code samples below) and, more generally, extend the user-experience and user-interface in platform-specific manners (for instance, by accessing platform-specific sensors or capabilities).
The dependencies are one-way: the platforms depend on the shared project, but not vice-versa:

The Solution Pad for a cross-platform "Hello, World!" app might look like this:

The shared portion of the Xamarin.Forms code might look like this:
C# Example
public class App
{
public static Page GetMainPage()
{
return new ContentPage
{
Content = new Label
{
Text = "Hello, Forms!",
VerticalOptions = LayoutOptions.CenterAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
},
};
}
}
The iOS platform code would look like this:
C# Example
[Register("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
UIWindow window;
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
Forms.Init();
window = new UIWindow(UIScreen.MainScreen.Bounds);
window.RootViewController = App.GetMainPage().CreateViewController();
window.MakeKeyAndVisible();
return true;
}
}
The Android platform code would look like this:
C# Example
namespace HelloXamarinFormsWorld.Android
{
[Activity(Label = "HelloXamarinFormsWorld", MainLauncher = true)]
public class MainActivity : AndroidActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Xamarin.Forms.Forms.Init(this, bundle);
SetPage(App.GetMainPage());
}
}
}
And the Windows Phone code would look like this:
C# Example
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
Forms.Init();
Content = HelloXamarinFormsWorld.App.GetMainPage().ConvertPageToUIElement(this);
}
}
The resulting app looks like this on the various device:

Important types in the Xamarin.Forms namespace include Xamarin.Forms.Pages, Xamarin.Forms.Views, and Xamarin.Forms.Layouts. Xamarin.Forms.Pages typically correspond with controller objects (Activities in the Android world, UIViewControllers in the iOS world), Xamarin.Forms.Views with controls or widgets, and Xamarin.Forms.Layouts arrange Xamarin.Forms.Views on other Xamarin.Forms.Views. These types are all derived from Xamarin.Forms.Element, as shown in the following diagram:

Application developers use the Model-View-ViewModel (MVVM) pattern to create Xamarin.Forms apps that cleanly separate the concerns of data presentation and user interface from the concerns of data storage and manipulation. The Xamarin.Forms framework enables this by providing, among a few other related types, the Xamarin.Forms.BindableObject and Xamarin.Forms.BindableProperty classes. Objects that inherit from Xamarin.Forms.BindableObject can be bound to members of type Xamarin.Forms.BindableProperty on other objects.
A Xamarin.Forms.BindableObject maintains dictionary of Xamarin.Forms.BindableProperty names and an association with their corresponding binding contexts--simply the object on which the Xamarin.Forms.BindableProperty is defined and that the application developer has assigned to the Xamarin.Forms.BindingObject.BindingContext property--through a Xamarin.Forms.Binding. See Xamarin.Forms.BindableObject for more information.
| Type | Reason |
|---|---|
| AbsoluteLayout | Positions child elements at absolute positions. |
| AbsoluteLayout+IAbsoluteList<T> | List interface with overloads for adding elements to an absolute layout. |
| AbsoluteLayoutFlags | Flags used to modify how layout bounds are interpreted in an Xamarin.Forms.AbsoluteLayout. |
| ActivityIndicator | A visual control used to indicate that something is ongoing. |
| Animation | Encapsulates an animation, a collection of functions that modify properties over a user-perceptible time period. |
| AnimationExtensions | Extension methods for Xamarin.Forms.Animation. |
| Application | Class that represents a cross-platform mobile application. |
| Aspect | Defines how an image is displayed. |
| BackButtonPressedEventArgs | Contains arguments for the event that is raised when a back button is pressed. |
| BaseMenuItem | Base class for menu items. |
| Behavior | Base class for generalized user-defined behaviors that can respond to arbitrary conditions and events. |
| Behavior<T> | Base generic class for generalized user-defined behaviors that can respond to arbitrary conditions and events. |
| BindableObject | Provides a mechanism by which application developers can propagate changes that are made to data in one object to another, by enabling validation, type coercion, and an event system. Xamarin.Forms.BindableProperty. |
| BindableObjectExtensions | Contains convenience extension methods for Xamarin.Forms.BindableObject. |
| BindableProperty | A BindableProperty is a backing store for properties allowing bindings on Xamarin.Forms.BindableObject. |
| BindableProperty+BindingPropertyChangedDelegate | Delegate for BindableProperty.PropertyChanged. |
| BindableProperty+BindingPropertyChangedDelegate<TPropertyType> | Strongly-typed delegate for BindableProperty.PropertyChanged. |
| BindableProperty+BindingPropertyChangingDelegate | Delegate for BindableProperty.PropertyChanging. |
| BindableProperty+BindingPropertyChangingDelegate<TPropertyType> | Strongly-typed delegate for BindableProperty.PropertyChanging. |
| BindableProperty+CoerceValueDelegate | Delegate for BindableProperty.CoerceValue. |
| BindableProperty+CoerceValueDelegate<TPropertyType> | Strongly-typed delegate for BindableProperty.CoerceValue. |
| BindableProperty+CreateDefaultValueDelegate | Strongly typed delegate for BindableProperty.DefaultValueCreator. |
| BindableProperty+CreateDefaultValueDelegate<TDeclarer,TPropertyType> | Delegate for BindableProperty.DefaultValueCreator. |
| BindableProperty+ValidateValueDelegate | Delegate for BindableProperty.ValidateValue. |
| BindableProperty+ValidateValueDelegate<TPropertyType> | Strongly-typed delegate for BindableProperty.ValidateValue. |
| BindablePropertyKey | The secret key to a BindableProperty, used to implement a BindableProperty with restricted write access. |
| Binding | A single 1:1 immutable data binding. |
| BindingBase | An abstract class that provides a Xamarin.Forms.BindingMode and a formatting option. |
| BindingCondition | Class that represents a value comparison with the target of an arbitrary binding. |
| BindingMode | The direction of changes propagation for bindings. |
| BindingTypeConverter | Type converter that converts from source types to Xamarin.Forms.Binding |
| BoundsConstraint | A bounds layout constraint used by Xamarin.Forms.RelativeLayouts. |
| BoundsTypeConverter | A Xamarin.Forms.TypeConverter that converts strings into Xamarin.Forms.Rectangles for use with Xamarin.Forms.AbsoluteLayouts. |
| BoxView | A Xamarin.Forms.View used to draw a solid colored rectangle. |
| Button | A button Xamarin.Forms.View that reacts to touch events. |
| CarouselPage | A Page that users can swipe from side to side to display pages of content, like a gallery. |
| Cell | Provides base class and capabilities for all Forms cells. Cells are elements meant to be added to Xamarin.Forms.ListView or Xamarin.Forms.TableView. |
| CollectionSynchronizationCallback | Delegate for callback in Xamarin.Forms.BindingBase.EnableCollectionSynchronization. |
| Color | Class that represents a color and exposes it as RGBA and HSL values. |
| ColorTypeConverter | A Xamarin.Forms.TypeConverter that converts from strings to a Xamarin.Forms.Color. |
| ColumnDefinition | An Xamarin.Forms.IDefinition that defines properties for a column in a Xamarin.Forms.Grid. |
| ColumnDefinitionCollection | A Xamarin.Forms.DefinitionCollection`1 for Xamarin.Forms.ColumnDefinitions. |
| Command | Defines an System.Windows.Input.ICommand implementation wrapping an stem.Action. |
| Command<T> | Defines an System.Windows.Input.ICommand implementation wrapping a generic Action<T>. |
| Condition | Base class for conditions. |
| Constraint | A layout constraint used by Xamarin.Forms.RelativeLayouts. |
| ConstraintExpression | Defines a constraint relationship. |
| ConstraintType | Enumeration specifying whether a constraint is constant, relative to a view, or relative to its parent. |
| ConstraintTypeConverter | A Xamarin.Forms.TypeConverter that converts from strings to a Xamarin.Forms.Constraint. |
| ContentPage | A Xamarin.Forms.Page that displays a single view. |
| ContentPropertyAttribute | Indicates the property of the type that is the (default) content property. |
| ContentView | An element that contains a single child element. |
| DataTemplate | A template for multiple bindings, commonly used by Xamarin.Forms.ListViews, Xamarin.Forms.MultiPages, and Xamarin.Forms.TableViews. |
| DataTrigger | Class that represents a binding condition and a list of Xamarin.Forms.Setter objects that will be applied when the condition is met. |
| DateChangedEventArgs | Event arguments for Xamarin.Forms.DatePicker.DateSelected event. |
| DatePicker | A Xamarin.Forms.View that allows date picking. |
| DefinitionCollection<T> | A collection parameterized by an Xamarin.Forms.IDefinition. Base class for Xamarin.Forms.ColumnDefinitionCollection and Xamarin.Forms.RowDefinitionCollection. |
| DependencyAttribute | An attribute that indicates that the specified type provides a concrete implementation of a needed interface. |
| DependencyFetchTarget | Enumeration specifying whether Xamarin.Forms.DependencyService.Get should return a reference to a global or new instance. |
| DependencyService | Static class that provides the Xamarin.Forms.DependencyService.Get`1 factory method for retrieving platform-specific implementations of the specified type T. |
| Device | An utility class to interract with the current Device/Platform. |
| Device+Styles | Class that exposes device-specific styles as static fields. |
| Easing | Functions that modify values non-linearly, generally used for animations. |
| Editor | A control that can edit multiple lines of text. |
| Element | Provides the base class for all Forms hierarchal elements. This class contains all the methods and properties required to represent an element in the Forms hierarchy. |
| ElementEventArgs | Provides data for events pertaining to a single Xamarin.Forms.Element. |
| Entry | A control that can edit a single line of text. |
| EntryCell | A Xamarin.Forms.Cell with a label and a single line text entry field. |
| EventTrigger | Class that represents a triggering event and a list of Xamarin.Forms.TriggerAction objects that will be invoked when the event is raised. |
| FileImageSource | An Xamarin.Forms.ImageSource that reads an image from a file. |
| FocusEventArgs | Event args for Xamarin.Forms.VisualElement's Xamarin.Forms.VisualElement.Focused and Xamarin.Forms.VisualElement.Unfocused events. |
| Font | The font used to display text. |
| FontAttributes | Enumerates values that describe font styles. |
| FontSizeConverter | Converts a string into a font size. |
| FontTypeConverter | A Xamarin.Forms.TypeConverter that converts from strings to Xamarin.Forms.Core.Font. |
| FormattedString | Represents a text with attributes applied to some parts. |
| Frame | An element containing a single child, with some framing options. |
| GestureRecognizer | The base class for all gesture recognizers. |
| GestureState | Enumeration specifying the various states of a gesture. |
| Grid | A layout that arranges views in rows and columns. |
| Grid+IGridList<T> | List interface with overloads for adding elements to a grid. |
| GridLength | Used to define the size (width/height) of Grid ColumnDefinition and RowDefinition. |
| GridLengthTypeConverter | A Xamarin.Forms.TypeConverter that converts from strings to Xamarin.Forms.GridLengths. |
| GridUnitType | Enumerates values that control how the Xamarin.Forms.GridLength.Value property is interpreted for row and column definitions. |
| HandlerAttribute | An abstract attribute whose subclasses specify the platform-specific renderers for Xamarin.Forms abstract controls. |
| HtmlWebViewSource | A WebViewSource bound to an HTML-formatted string. |
| IAnimatable | Defines an interface for elements that can be animated. |
| IDefinition | Interface defining the type of Xamarin.Forms.RowDefinition and Xamarin.Forms.ColumnDefinition. |
| IElementController | When implemented in a derived class, sets the value on bound properties so that their bindings are preserved. |
| IGestureRecognizer | The base interface all gesture recognizers must implement. |
| ILayout | Interface indicating layout behavior and exposing the Xamarin.Forms.ILayout.LayoutChanged event. |
| Image | Xamarin.Forms.View that holds an image. |
| ImageCell | A Xamarin.Forms.TextCell that has an image. |
| ImageSource | Abstract class whose implementors load images from files or the Web. |
| INavigation | Interface abstracting platform-specific navigation. |
| InputView | The base class of a view which can take keyboard input. |
| IPageContainer<T> | Interface defining a container for Xamarin.Forms.Pages and exposing a Xamarin.Forms.IPageContainer`1.CurrentPage property. |
| IPlatform | Interface defining the abstraction of a native platform. |
| IPlatformEngine | Interface defining a native platform rendering engine. |
| IRegisterable | Internally-used flagging interface indicating types that can be registered with Xamarin.Forms.Registrar. |
| ItemsView<TVisual> | A base class for a view that contains a templated list of items. |
| ItemTappedEventArgs | Event arguments for the Xamarin.Forms.ListView.ItemTapped event. |
| ItemVisibilityEventArgs | Event args when an items visiblity has been changed in a Xamarin.Forms.ListView. |
| IValueConverter | Interface defining methods for two-way value conversion between types. |
| IViewContainer<T> | The type of element that can be added to the container. |
| IViewController | Contains methods that set values from renderers on bound properties without breaking the binding. |
| IVisualElementController | Method that is called when the native size of a visual element changes. |
| Keyboard | Default keyboard and base class for specialized keyboards, such as those for telephone numbers, email, and URLs. |
| KeyboardFlags | Flagging enumeration for Keyboard options such as Capitalization, Spellcheck, and Suggestions. |
| KeyboardTypeConverter | A Xamarin.Forms.TypeConverter that converts a string into a Xamarin.Forms.Keyboard. |
| Label | A Xamarin.Forms.View that displays text. |
| Layout | Provides the base class for all Layout elements. Use Layout elements to position and size child elements in Forms applications. |
| Layout<T> | A base implementation of a layout with undefined behavior and multiple children. |
| LayoutAlignment | Values that represent LayoutAlignment. |
| LayoutOptions | A struct whose static members define various alignment and expansion options. |
| LineBreakMode | Enumeration specifying various options for line breaking. |
| ListView | An Xamarin.Forms.ItemsView that displays a collection of data as a vertical list. |
| MasterBehavior | Enumerates values that control how detail content is displayed in a master-detail page. |
| MasterDetailPage | A Xamarin.Forms.Page that manages two panes of information: A master page that presents data at a high level, and a detail page that displays low-level details about information in the master. |
| MenuItem | Class that presents a menu item and associates it with a command. |
| MessagingCenter | Associates a callback on subscribers with a specific message name. |
| MultiPage<T> | A bindable, templatable base class for pages which contain multiple sub-pages. |
| MultiTrigger | Class that represents a list of property and binding conditions, and a list of setters that are applied when all of the conditions in the list are met. |
| NamedSize | Represents pre-defined font sizes. |
| NameScopeExtensions | Extension methods for Xamarin.Forms.Element and Xamarin.Forms.INameScope that add strongly-typed FindByName methods. |
| NavigationEventArgs | EventArgs for the NavigationPage's navigation events. |
| NavigationPage | A Xamarin.Forms.Page that manages the navigation and user-experience of a stack of other pages. |
| OnIdiom<T> | Provides idiom-specific implementation of T for the current TargetIdiom. |
| OnPlatform<T> | Provides the platform-specific implementation of T for the current Xamarin.Forms.Device.OS. |
| OpenGLView | A Xamarin.Forms.View that displays OpenGL content. |
| Page | A Xamarin.Forms.VisualElement that occupies the entire screen. |
| Picker | A Xamarin.Forms.View control for picking an element in a list. |
| Point | Struct defining a 2-D point as a pair of doubles. |
| PointTypeConverter | A Xamarin.Forms.TypeConverter that converts from a string to a Xamarin.Forms.Point. |
| ProgressBar | A Xamarin.Forms.View control that displays progress. |
| PropertyChangingEventArgs | Event arguments for the Xamarin.Forms.PropertyChangingEventHandler delegate. |
| PropertyChangingEventHandler | Delegate for the Xamarin.Forms.BindableObject.PropertyChanging event. |
| PropertyCondition | Class that represents a value comparison with a property. |
| Rectangle | Struct defining a rectangle, using doubles. |
| RectangleTypeConverter | A Xamarin.Forms.TypeConverter that converts a string to a Xamarin.Forms.Rectangle. |
| RelativeLayout | A Xamarin.Forms.Layout`1 that uses Xamarin.Forms.Constraints to layout its children. |
| RelativeLayout+IRelativeList<T> | An IList`1 of Xamarin.Forms.Views used by a Xamarin.Forms.RelativeLayout. |
| RenderWithAttribute | Associate view with renderer. |
| ResourceDictionary | An IDictionary that maps identifier strings to arbitrary resource objects. |
| RowDefinition | An Xamarin.Forms.IDefinition that defines properties for a row in a Xamarin.Forms.Grid. |
| RowDefinitionCollection | A Xamarin.Forms.DefinitionCollection`1 for Xamarin.Forms.RowDefinitions. |
| ScrollOrientation | Enumeration specifying vertical or horizontal scrolling directions. |
| ScrollToPosition | Enumerates values that describe a scroll request. |
| ScrollView | An element capable of scrolling if its Content requires. |
| SearchBar | A Xamarin.Forms.View control that provides a search box. |
| SelectedItemChangedEventArgs | Event arguments for the Xamarin.Forms.ListView.ItemSelected event. |
| Setter | Represents an assignment of a property to a value, typically in a style or in response to a trigger. |
| SettersExtensions | Defines extensions methods for IList<Setter> |
| Size | Struct defining height and width as a pair of doubles. |
| SizeRequest | Struct defining minimum and maximum Xamarin.Forms.Sizes. |
| Slider | A Xamarin.Forms.View control that inputs a linear value. |
| Span | Represents a part of a FormattedString. |
| StackLayout | A Xamarin.Forms.Layout`1 that positions child elements in a single line which can be oriented vertically or horizontally. |
| StackOrientation | The orientations the a StackLayout can have. |
| Stepper | A Xamarin.Forms.View control that inputs a discrete value, constrained to a range. |
| StreamImageSource | Xamarin.Forms.ImageSource that loads an image from a System.IO.Stream. |
| Style | Class that contains triggers, setters, and behaviors that completely or partially define the appearance and behavior of a class of visual elements. |
| Switch | A Xamarin.Forms.View control that provides a toggled value. |
| SwitchCell | A Xamarin.Forms.Cell with a label and an on/off switch. |
| TabbedPage | Xamarin.Forms.MultipPage`1 that displays an array of tabs across the top of the screen, each of which loads content onto the screen. |
| TableIntent | TableIntent provides hints to the renderer about how a table will be used. |
| TableRoot | A Xamarin.Forms.TableSection that contains either a table section or the entire table. |
| TableSection | A logical and visible section of a Xamarin.Forms.TableView. |
| TableSectionBase | Abstract base class defining a table section. |
| TableSectionBase<T> | Table section that contains instances of type T that are rendered by Xamarin.Forms. |
| TableView | A Xamarin.Forms.View that holds rows of Xamarin.Forms.Cell elements. |
| TapGestureRecognizer | Provides tap gesture recognition and events. |
| TappedEventArgs | Arguments for the Xamarin.Forms.TappedEvent event. |
| TargetIdiom | Indicates the type of device Forms is working on. |
| TargetPlatform | Indicates the kind of OS Forms is currently working on. |
| TemplateExtensions | Extension class for DataTemplate, providing a string-based shortcut method for defining a Binding. |
| TextAlignment | Represents vertical and horizontal text alignement. |
| TextCell | A Xamarin.Forms.Cell with primary Xamarin.Forms.TextCell.Text and Xamarin.Forms.TextCell.Detail text. |
| TextChangedEventArgs | Event arguments for TextChanged events. Provides old and new text values. |
| Thickness | Struct defining thickness around the edges of a Xamarin.Forms.Rectangle using doubles. |
| ThicknessTypeConverter | A Xamarin.Forms.TypeConverter that converts from a string to a Xamarin.Forms.Thickness. |
| TimePicker | A Xamarin.Forms.View control that provides time picking. |
| ToggledEventArgs | Event arguments for Xamarin.Forms.Switch.Toggled and Xamarin.Forms.SwitchCell.OnChanged events. |
| ToolbarItem | An item in a toolbar or displayed on a Xamarin.Forms.Page. |
| ToolbarItemOrder | Enumeration specifying whether the Xamarin.Forms.ToolbarItem appears on the primary toolbar surface or secondary. |
| Trigger | Class that represents a property condition and an action that is performed when the condition is met. |
| TriggerAction | A base class for user-defined actions that are performed when a trigger condition is met. |
| TriggerAction<T> | A generic base class for user-defined actions that are performed when a trigger condition is met. |
| TriggerBase | Base class for classes that contain a condition and a list of actions to perform when the condition is met. |
| TypeConverter | Abstract base class whose subclasses can convert values between different types. |
| TypeConverterAttribute | Attribute that specifies the type of Xamarin.Forms.TypeConverter used by its target. |
| UnsolvableConstraintsException | Exception indicating that the Xamarin.Forms.Constraints specified cannot be simultaneously satisfied. |
| UriImageSource | An ImageSource that loads an image from a URI, caching the result. |
| UriTypeConverter | A Xamarin.Forms.TypeConverter that converts from a string or Uri to a Uri. |
| UrlWebViewSource | A WebViewSource bound to a URL. |
| ValueChangedEventArgs | Event arguments for ValueChanged events. Provides both old and new values. |
| Vec2 | Struct defining X and Y double values. |
| View | A visual element that is used to place layouts and controls on the screen. |
| ViewCell | A Xamarin.Forms.Cell containing a developer-defined Xamarin.Forms.View. |
| ViewExtensions | Extension methods for Xamarin.Forms.Views, providing animatable scaling, rotation, and layout functions. |
| ViewState | Deprecated. Do not use. |
| VisualElement | A Xamarin.Forms.Element that occupies an area on the screen, has a visual appearance, and can obtain touch input. |
| WebNavigatedEventArgs | Class that contains arguments for the event that is raised after web navigation completes. |
| WebNavigatingEventArgs | Class that contains arguments for the event that is raised after web navigation begins. |
| WebNavigationEvent | Contains values that indicate why a navigation event was raised. |
| WebNavigationEventArgs | TClass that contains arguments for the event that is when web navigation begins. |
| WebNavigationResult | Enumerates values that indicate the outcome of a web navigation. |
| WebView | A Xamarin.Forms.View that presents HTML content. |
| WebViewSource | Abstract class whose subclasses provide the data for a Xamarin.Forms.WebView. |
| WebViewSourceTypeConverter | A Xamarin.Forms.TypeConverter that converts a string to a Xamarin.Forms.UrlWebViewSource. |