Skip to content

Commit b24336a

Browse files
committed
implementation of a text field box
1 parent 1e3c804 commit b24336a

File tree

7 files changed

+82
-31
lines changed

7 files changed

+82
-31
lines changed

MainDemo.Wpf/TextFields.xaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@
6464
<RowDefinition Height="Auto" />
6565
<RowDefinition Height="Auto" />
6666
<RowDefinition Height="Auto" />
67+
<RowDefinition Height="Auto" />
68+
<RowDefinition Height="Auto" />
69+
<RowDefinition Height="Auto" />
6770
</Grid.RowDefinitions>
6871
<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Style="{StaticResource MaterialDesignHeadlineTextBlock}">Common Fields</TextBlock>
6972
<materialDesign:PackIcon Grid.Row="1" Grid.Column="0" Kind="Account" Foreground="{Binding ElementName=NameTextBox, Path=BorderBrush}" />
@@ -287,6 +290,7 @@
287290
<ComboBoxItem>Pear</ComboBoxItem>
288291
<ComboBoxItem>Orange</ComboBoxItem>
289292
</ComboBox>
290-
293+
<TextBlock Grid.Row="13" Grid.Column="1" Grid.ColumnSpan="3" Style="{StaticResource MaterialDesignHeadlineTextBlock}" Margin="0,0,0,16">Text field box</TextBlock>
294+
<TextBox Grid.Row="14" Grid.Column="1" Grid.ColumnSpan="3" Style="{StaticResource MaterialDesignTextFieldBoxTextBox}" materialDesign:HintAssist.Hint="Floating hint in a box" />
291295
</Grid>
292296
</UserControl>

MaterialDesignThemes.Wpf/TextFieldAssist.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,19 @@ public static Visibility GetDecorationVisibility(DependencyObject element)
6767
return (Visibility)element.GetValue(DecorationVisibilityProperty);
6868
}
6969

70+
public static readonly DependencyProperty HasTextFieldBoxProperty = DependencyProperty.RegisterAttached(
71+
"HasTextFieldBox", typeof(bool), typeof(TextFieldAssist), new PropertyMetadata(false));
72+
73+
public static void SetHasTextFieldBox(DependencyObject element, bool value)
74+
{
75+
element.SetValue(HasTextFieldBoxProperty, value);
76+
}
77+
78+
public static bool GetHasTextFieldBox(DependencyObject element)
79+
{
80+
return (bool)element.GetValue(HasTextFieldBoxProperty);
81+
}
82+
7083
/// <summary>
7184
/// Automatially inserts spelling suggestions into the text box context menu.
7285
/// </summary>

MaterialDesignThemes.Wpf/Themes/Generic.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,12 +189,13 @@
189189
<Setter Property="IsTabStop" Value="False"/>
190190
<Setter Property="Template">
191191
<Setter.Value>
192-
<ControlTemplate>
192+
<ControlTemplate TargetType="{x:Type local:Underline}">
193193
<ControlTemplate.Resources>
194194
<CircleEase x:Key="UnderlineEasingFunction" EasingMode="EaseOut"/>
195195
</ControlTemplate.Resources>
196196
<Border x:Name="UnderlineBorder"
197197
Background="{TemplateBinding Background}"
198+
CornerRadius="{TemplateBinding CornerRadius}"
198199
IsHitTestVisible="False"
199200
Height="{TemplateBinding Height}"
200201
VerticalAlignment="{TemplateBinding VerticalAlignment}"

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.Dark.xaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,6 @@
2828
<SolidColorBrush x:Key="MaterialDesignSnackbarBackground" Color="#FFCDCDCD" po:Freeze="True" />
2929
<SolidColorBrush x:Key="MaterialDesignSnackbarMouseOver" Color="#FFB9B9BD" po:Freeze="True" />
3030
<SolidColorBrush x:Key="MaterialDesignSnackbarRipple" Color="#FF494949" po:Freeze="True" />
31+
32+
<SolidColorBrush x:Key="MaterialDesignTextFieldBoxBackground" Color="#1AFFFFFF" po:Freeze="True" /> <!-- 10% white -->
3133
</ResourceDictionary>

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.Light.xaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,6 @@
2828
<SolidColorBrush x:Key="MaterialDesignSnackbarBackground" Color="#FF323232" po:Freeze="True" />
2929
<SolidColorBrush x:Key="MaterialDesignSnackbarMouseOver" Color="#FF464642" po:Freeze="True" />
3030
<SolidColorBrush x:Key="MaterialDesignSnackbarRipple" Color="#FFB6B6B6" po:Freeze="True" />
31+
32+
<SolidColorBrush x:Key="MaterialDesignTextFieldBoxBackground" Color="#0F000000" po:Freeze="True" /> <!-- 6% black -->
3133
</ResourceDictionary>

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml

Lines changed: 48 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -50,35 +50,39 @@
5050
<Setter Property="Template">
5151
<Setter.Value>
5252
<ControlTemplate TargetType="{x:Type TextBox}">
53-
<Grid>
54-
<Border x:Name="border"
55-
BorderBrush="{TemplateBinding BorderBrush}"
56-
BorderThickness="{TemplateBinding BorderThickness}"
57-
Background="{TemplateBinding Background}"
58-
SnapsToDevicePixels="True"
59-
Padding="0 4 0 4">
60-
<Grid Margin="{TemplateBinding Padding}"
61-
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
62-
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
63-
<ScrollViewer x:Name="PART_ContentHost" Focusable="false"
64-
HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"
65-
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
66-
UseLayoutRounding="{TemplateBinding UseLayoutRounding}"
67-
/>
68-
<wpf:SmartHint x:Name="Hint"
69-
Hint="{Binding Path=(wpf:HintAssist.Hint), RelativeSource={RelativeSource TemplatedParent}}"
70-
HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}"
71-
FontSize="{TemplateBinding FontSize}"
72-
Padding="{TemplateBinding Padding}"
73-
HintOpacity="{Binding Path=(wpf:HintAssist.HintOpacity), RelativeSource={RelativeSource TemplatedParent}}"
74-
UseFloating="{Binding Path=(wpf:HintAssist.IsFloating), RelativeSource={RelativeSource TemplatedParent}}"
75-
FloatingScale="{Binding Path=(wpf:HintAssist.FloatingScale), RelativeSource={RelativeSource TemplatedParent}}"
76-
FloatingOffset="{Binding Path=(wpf:HintAssist.FloatingOffset), RelativeSource={RelativeSource TemplatedParent}}"
77-
/>
78-
</Grid>
79-
</Border>
80-
<wpf:Underline x:Name="Underline" Visibility="{Binding Path=(wpf:TextFieldAssist.DecorationVisibility), RelativeSource={RelativeSource TemplatedParent}}"/>
81-
</Grid>
53+
<Border x:Name="textFieldBoxBorder"
54+
SnapsToDevicePixels="True">
55+
<Grid>
56+
<Border x:Name="border"
57+
BorderBrush="{TemplateBinding BorderBrush}"
58+
BorderThickness="{TemplateBinding BorderThickness}"
59+
Background="{TemplateBinding Background}"
60+
SnapsToDevicePixels="True"
61+
Padding="0 4 0 4">
62+
<Grid x:Name="textFieldGrid"
63+
Margin="{TemplateBinding Padding}"
64+
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
65+
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
66+
<ScrollViewer x:Name="PART_ContentHost" Focusable="false"
67+
HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"
68+
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
69+
UseLayoutRounding="{TemplateBinding UseLayoutRounding}"
70+
/>
71+
<wpf:SmartHint x:Name="Hint"
72+
Hint="{Binding Path=(wpf:HintAssist.Hint), RelativeSource={RelativeSource TemplatedParent}}"
73+
HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}"
74+
FontSize="{TemplateBinding FontSize}"
75+
Padding="{TemplateBinding Padding}"
76+
HintOpacity="{Binding Path=(wpf:HintAssist.HintOpacity), RelativeSource={RelativeSource TemplatedParent}}"
77+
UseFloating="{Binding Path=(wpf:HintAssist.IsFloating), RelativeSource={RelativeSource TemplatedParent}}"
78+
FloatingScale="{Binding Path=(wpf:HintAssist.FloatingScale), RelativeSource={RelativeSource TemplatedParent}}"
79+
FloatingOffset="{Binding Path=(wpf:HintAssist.FloatingOffset), RelativeSource={RelativeSource TemplatedParent}}"
80+
/>
81+
</Grid>
82+
</Border>
83+
<wpf:Underline x:Name="Underline" Visibility="{Binding Path=(wpf:TextFieldAssist.DecorationVisibility), RelativeSource={RelativeSource TemplatedParent}}"/>
84+
</Grid>
85+
</Border>
8286
<ControlTemplate.Triggers>
8387
<MultiTrigger>
8488
<MultiTrigger.Conditions>
@@ -91,6 +95,16 @@
9195
<Trigger Property="wpf:HintAssist.IsFloating" Value="True">
9296
<Setter TargetName="border" Property="Margin" Value="0 12 0 0" />
9397
</Trigger>
98+
<Trigger Property="wpf:TextFieldAssist.HasTextFieldBox" Value="True">
99+
<Setter TargetName="textFieldBoxBorder" Property="Background" Value="{DynamicResource MaterialDesignTextFieldBoxBackground}" />
100+
<Setter TargetName="textFieldBoxBorder" Property="CornerRadius" Value="4" />
101+
<Setter TargetName="textFieldBoxBorder" Property="Padding" Value="0,8,0,0" />
102+
<Setter TargetName="textFieldGrid" Property="Margin" Value="16,0,16,0" />
103+
<Setter TargetName="border" Property="BorderThickness" Value="0" />
104+
<Setter TargetName="Underline" Property="CornerRadius" Value="0,0,4,4" />
105+
<Setter TargetName="Hint" Property="Margin" Value="0,0,0,16" />
106+
<Setter TargetName="PART_ContentHost" Property="Margin" Value="0,8,0,8" />
107+
</Trigger>
94108
<Trigger Property="IsEnabled" Value="false">
95109
<Setter Property="Opacity" TargetName="border" Value="0.56"/>
96110
</Trigger>
@@ -123,4 +137,9 @@
123137
<Setter Property="wpf:HintAssist.IsFloating" Value="True"/>
124138
</Style>
125139

140+
<Style x:Key="MaterialDesignTextFieldBoxTextBox" TargetType="{x:Type TextBox}" BasedOn="{StaticResource MaterialDesignTextBox}">
141+
<Setter Property="wpf:TextFieldAssist.HasTextFieldBox" Value="True" />
142+
<Setter Property="wpf:HintAssist.IsFloating" Value="True"/>
143+
</Style>
144+
126145
</ResourceDictionary>

MaterialDesignThemes.Wpf/Underline.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ public bool IsActive
4040
set { SetValue(IsActiveProperty, value); }
4141
}
4242

43+
public static readonly DependencyProperty CornerRadiusProperty = DependencyProperty.Register(
44+
nameof(CornerRadius), typeof(CornerRadius), typeof(Underline),
45+
new FrameworkPropertyMetadata(new CornerRadius(0), FrameworkPropertyMetadataOptions.AffectsRender, null));
46+
47+
public CornerRadius CornerRadius
48+
{
49+
get { return (CornerRadius)GetValue(CornerRadiusProperty); }
50+
set { SetValue(CornerRadiusProperty, value); }
51+
}
52+
4353
public override void OnApplyTemplate()
4454
{
4555
base.OnApplyTemplate();

0 commit comments

Comments
 (0)