ToggleSwitch in Uno.UI

ToggleSwitch represents a switch that can be toggled between two states.

ToggleSwitch UWP Default Style

Uno provides a full support of the ToggleSwitch UWP style. The ToggleSwitch with the default style looks the same on all platforms, both statically and in motion. If you need to have a custom design, you can just update the ToggleSwitch UWP default style for your needs.

ToggleSwitch Native Default Style

With the 'NativeDefaultToggleSwitch' style on Android and iOS, however, the ToggleSwitch uses the native toggle control of each platform. Of course you can still bind to its properties in XAML as you normally would. This is another powerful option to have: for some apps it makes sense to look as 'native' as possible, for others its desirable to have a rich, customised UI. You may even want to mix and match different approaches for different screens in your app.

Native Android ToggleSwitch

The Native Style for ToggleSwitch on Android is based on SwitchCompat, a Material Design version of the Switch widget supported by API 7 and above. It does not make any attempt to use the platform provided widget on those devices which it is available normally. This ensures the same behavior on all system versions.

Platform support

Property BindableSwitchCompat
Checked X
Enabled X
Text X
TextColor X
TextOff
TextOn
ShowText
SplitTrack
SwitchMinWidth
SwitchPadding
SwitchTextAppearance
Thumb
ThumbTextPadding
ThumbTint X
ThumbTintMode
Track
TrackTint X
TrackTintMode

Native Android ToggleSwitch Style

If you need the simple native style :

   	<android:Style x:Key="NativeDefaultToggleSwitch"
				   TargetType="ToggleSwitch">
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="ToggleSwitch">
					<BindableSwitchCompat Checked="{TemplateBinding IsOn, Mode=TwoWay}"
										  Enabled="{TemplateBinding IsEnabled}"
										  Text="{TemplateBinding Header}" />
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</android:Style>

If you need the native style but you want to change the Text, ThumbTint and TrackTint colors :

   	<android:Style x:Key="NativeDefaultToggleSwitch"
				   TargetType="ToggleSwitch">
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="ToggleSwitch">
					<BindableSwitchCompat Checked="{TemplateBinding IsOn, Mode=TwoWay}"
										  Enabled="{TemplateBinding IsEnabled}"
										  Text="{TemplateBinding Header}"
										  TextColor="{TemplateBinding Foreground}"
										  ThumbTint="{TemplateBinding BorderBrush}"
										  TrackTint="{TemplateBinding Background}" />
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</android:Style>

Native iOS ToggleSwitch

Based on the UISwitch.

Platform support

Property BindableUISwitch
IsOn X
Enabled X
OnTintColorBrush X
TintColorBrush X
ThumbTintColorBrush X
OnImage
OffImage

Native iOS ToggleSwitch Style

If you need the simple native style :

	<ios:Style x:Key="NativeDefaultToggleSwitch"
			   TargetType="ToggleSwitch">
		<!-- Ensures the UISwitch's shadow doesn't get clipped. -->
		<Setter Property="ClipsToBounds"
				Value="False" />
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="ToggleSwitch">
					<BindableUISwitch IsOn="{TemplateBinding IsOn, Mode=TwoWay}"
									  Enabled="{TemplateBinding IsEnabled}" />
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</ios:Style>

If you need the native style but you want to change the Tint, OnTinT and ThumbTint colors :

	<ios:Style x:Key="NativeDefaultToggleSwitch"
			   TargetType="ToggleSwitch">
		<!-- Ensures the UISwitch's shadow doesn't get clipped. -->
		<Setter Property="ClipsToBounds"
				Value="False" />
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="ToggleSwitch">
					<BindableUISwitch IsOn="{TemplateBinding IsOn, Mode=TwoWay}"
									  Enabled="{TemplateBinding IsEnabled}"
									  TintColorBrush="{TemplateBinding BorderBrush}"
									  OnTintColorBrush="{TemplateBinding Background}"
									  ThumbTintColorBrush="{TemplateBinding Foreground}" />
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</ios:Style>