summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.WinRT.Phone/FormsTextBoxStyle.xaml
blob: 3f3cced7f8cd989e6964ea9136bbb208c3ccee70 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:forms="using:Xamarin.Forms.Platform.WinRT"
    xmlns:system="using:System">

	<forms:TextAlignmentToHorizontalAlignmentConverter x:Key="AlignmentConverter" />

	<Style x:Key="FormsTextBoxStyle" TargetType="forms:FormsTextBox">
		<Setter Property="MinWidth" Value="{ThemeResource TextControlThemeMinWidth}"/>
		<Setter Property="MinHeight" Value="{ThemeResource TextControlThemeMinHeight}"/>
		<Setter Property="Foreground" Value="{ThemeResource TextBoxForegroundThemeBrush}"/>
		<Setter Property="SelectionHighlightColor" Value="{ThemeResource TextSelectionHighlightColorThemeBrush}"/>
		<Setter Property="Background" Value="{ThemeResource TextBoxBackgroundThemeBrush}"/>
		<Setter Property="BackgroundFocusBrush" Value="{ThemeResource TextBoxFocusedBackgroundThemeBrush}"/>
		<Setter Property="BorderBrush" Value="{ThemeResource TextBoxBorderThemeBrush}"/>
		<Setter Property="BorderThickness" Value="0"/>
		<Setter Property="FontFamily" Value="{ThemeResource PhoneFontFamilyNormal}"/>
		<Setter Property="FontSize" Value="{ThemeResource ContentControlFontSize}"/>
		<Setter Property="PlaceholderForegroundBrush" Value="{ThemeResource TextBoxPlaceholderTextThemeBrush}" />
		<Setter Property="TextWrapping" Value="NoWrap"/>
		<Setter Property="ScrollViewer.HorizontalScrollMode" Value="Auto"/>
		<Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto"/>
		<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden"/>
		<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden"/>
		<Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False"/>
		<Setter Property="Padding" Value="{ThemeResource TextControlThemePadding}"/>
		<Setter Property="Margin" Value="0"/>
		<Setter Property="VerticalAlignment" Value="Top"/>
		<Setter Property="Template">
			<Setter.Value>
				<ControlTemplate TargetType="forms:FormsTextBox">
					<Grid Background="Transparent">
						<Grid.RowDefinitions>
							<RowDefinition Height="Auto"/>
							<RowDefinition Height="*"/>
						</Grid.RowDefinitions>
						<VisualStateManager.VisualStateGroups>
							<VisualStateGroup x:Name="CommonStates">
								<VisualState x:Name="Disabled">
									<Storyboard>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="BorderElement">
											<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledBackgroundThemeBrush}"/>
										</ObjectAnimationUsingKeyFrames>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="BorderElement">
											<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledBorderThemeBrush}"/>
										</ObjectAnimationUsingKeyFrames>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentElement">
											<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledForegroundThemeBrush}"/>
										</ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ContentElement">
                                            <DiscreteObjectKeyFrame KeyTime="0"  Value="{ThemeResource TextBoxDisabledBackgroundThemeBrush}" />
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="PlaceholderTextContentPresenter">
											<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledForegroundThemeBrush}"/>
										</ObjectAnimationUsingKeyFrames>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="HeaderContentPresenter">
											<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledHeaderForegroundThemeBrush}"/>
										</ObjectAnimationUsingKeyFrames>
									</Storyboard>
								</VisualState>
								<VisualState x:Name="Normal">
									<Storyboard>
										<DoubleAnimation Duration="0" To="{ThemeResource TextControlBorderThemeOpacity}" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BorderElement"/>
									</Storyboard>
								</VisualState>
								<VisualState x:Name="Focused">
									<Storyboard>
										<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="BorderElement">
											<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextSelectionHighlightColorThemeBrush}"/>
										</ObjectAnimationUsingKeyFrames>
										<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="PlaceholderTextContentPresenter"/>
										<!-- The commented-out section below *should* work, at least according to the docs and examples; but 
										instead it just crashes the application as soon as you focus a textbox. So the forms textbox class handles this 
										state manually in the phone version. I'm leaving this here in case someone can figure it out, because the VSM 
										is a much more elegant solution. (e.g., see the UWP project, where this *does* work) -->
										<!--<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="BorderElement">
											<DiscreteObjectKeyFrame KeyTime="0" Value="{Binding BackgroundFocusBrush, RelativeSource={RelativeSource TemplatedParent}}"/>
										</ObjectAnimationUsingKeyFrames>-->
									</Storyboard>
								</VisualState>
							</VisualStateGroup>
						</VisualStateManager.VisualStateGroups>
						<Border x:Name="BorderElement" 
                                BorderBrush="{TemplateBinding BorderBrush}"
                                Background="{TemplateBinding Background}" 
								BorderThickness="{TemplateBinding BorderThickness}" 
                                Grid.Row="1"/>
						<ContentPresenter x:Name="HeaderContentPresenter" 
                                          ContentTemplate="{TemplateBinding HeaderTemplate}" 
                                          Content="{TemplateBinding Header}" 
                                          Margin="{ThemeResource TextControlHeaderMarginThemeThickness}" 
                                          Grid.Row="0" Style="{StaticResource HeaderContentPresenterStyle}"/>
						<ScrollViewer x:Name="ContentElement" 
                                      AutomationProperties.AccessibilityView="Raw" 
                                      Background="{Binding BackgroundFocusBrush, RelativeSource={RelativeSource TemplatedParent}}"
                                      HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" 
                                      HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" 
                                      IsTabStop="False" 
                                      IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" 
                                      IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" 
                                      IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" 
                                      Margin="{TemplateBinding BorderThickness}" 
                                      MinHeight="{ThemeResource TextControlThemeMinHeight}" 
                                      Padding="{TemplateBinding Padding}" 
                                      Grid.Row="1" 
									  FontSize="{ThemeResource ContentControlFontSize}" 
                                      VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" 
                                      VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" 
                                      ZoomMode="Disabled"/>
						<ContentControl x:Name="PlaceholderTextContentPresenter" 
                                        Content="{TemplateBinding PlaceholderText}"  
                                        Foreground="{TemplateBinding PlaceholderForegroundBrush}"
                                        FontSize="{ThemeResource ContentControlFontSize}" 
                                        IsTabStop="False" 
										Margin="{ThemeResource RichEditBoxTextThemeMargin}"
                                        Padding="{TemplateBinding Padding}" 
                                        Grid.Row="1" 
                                        HorizontalAlignment="{Binding TextAlignment, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource AlignmentConverter}}"/>
					</Grid>
				</ControlTemplate>
			</Setter.Value>
		</Setter>
	</Style>
</ResourceDictionary>