Skip to content

Commit e14dd76

Browse files
committed
feat: Implement TextBox Description Property
fix: Conditionally mark Description property with new
1 parent 5304339 commit e14dd76

File tree

3 files changed

+123
-50
lines changed

3 files changed

+123
-50
lines changed

src/Uno.UI/Generated/3.0.0.0/Windows.UI.Xaml.Controls/TextBox.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public bool IsHandwritingViewEnabled
190190
}
191191
}
192192
#endif
193-
#if __ANDROID__ || __IOS__ || NET461 || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__
193+
#if false
194194
[global::Uno.NotImplemented("__ANDROID__", "__IOS__", "NET461", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")]
195195
public object Description
196196
{
@@ -353,7 +353,7 @@ public bool CanUndo
353353
typeof(global::Windows.UI.Xaml.Controls.TextBox),
354354
new FrameworkPropertyMetadata(default(global::Windows.UI.Xaml.Controls.Primitives.FlyoutBase)));
355355
#endif
356-
#if __ANDROID__ || __IOS__ || NET461 || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__
356+
#if false
357357
[global::Uno.NotImplemented("__ANDROID__", "__IOS__", "NET461", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")]
358358
public static global::Windows.UI.Xaml.DependencyProperty DescriptionProperty { get; } =
359359
Windows.UI.Xaml.DependencyProperty.Register(

src/Uno.UI/UI/Xaml/Controls/TextBox/TextBox.cs

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private void InitializeProperties()
104104
OnFocusStateChanged((FocusState)FocusStateProperty.GetMetadata(GetType()).DefaultValue, FocusState, initial: true);
105105
OnVerticalContentAlignmentChanged(VerticalAlignment.Top, VerticalContentAlignment);
106106
OnTextCharacterCasingChanged(CreateInitialValueChangerEventArgs(CharacterCasingProperty, CharacterCasingProperty.GetMetadata(GetType()).DefaultValue, CharacterCasing));
107-
107+
OnDescriptionChanged(CreateInitialValueChangerEventArgs(DescriptionProperty, DescriptionProperty.GetMetadata(GetType()).DefaultValue, Description));
108108
var buttonRef = _deleteButton?.GetTarget();
109109

110110
if (buttonRef != null)
@@ -296,6 +296,56 @@ private object CoerceText(object baseValue)
296296

297297
#endregion
298298

299+
#region Description DependencyProperty
300+
301+
public
302+
#if __IOS__ || __MACOS__
303+
new
304+
#endif
305+
object Description
306+
{
307+
get => (object)this.GetValue(DescriptionProperty);
308+
set
309+
{
310+
this.SetValue(DescriptionProperty, value);
311+
}
312+
}
313+
314+
public static DependencyProperty DescriptionProperty { get; } =
315+
DependencyProperty.Register(
316+
"Description",
317+
typeof(object),
318+
typeof(TextBox),
319+
new FrameworkPropertyMetadata(
320+
defaultValue: null,
321+
propertyChangedCallback: (s, e) => ((TextBox)s)?.OnDescriptionChanged(e)
322+
)
323+
);
324+
325+
private void OnDescriptionChanged(DependencyPropertyChangedEventArgs args)
326+
{
327+
ContentPresenter descriptionPresenter = this.FindName("DescriptionPresenter") as ContentPresenter;
328+
if (descriptionPresenter != null)
329+
{
330+
if (args.NewValue != null)
331+
{
332+
if (args.NewValue is string s && string.IsNullOrWhiteSpace(s))
333+
{
334+
descriptionPresenter.Visibility = Visibility.Collapsed;
335+
}
336+
else
337+
{
338+
descriptionPresenter.Visibility = Visibility.Visible;
339+
}
340+
}
341+
else
342+
{
343+
descriptionPresenter.Visibility = Visibility.Collapsed;
344+
}
345+
}
346+
}
347+
#endregion
348+
299349
protected override void OnFontSizeChanged(double oldValue, double newValue)
300350
{
301351
base.OnFontSizeChanged(oldValue, newValue);

src/Uno.UI/UI/Xaml/Style/Generic/Generic.xaml

Lines changed: 70 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,11 @@
217217
</Setter>
218218
</xamarin:Style>
219219

220-
<!--Default style for Windows.UI.Xaml.Controls.TextBox-->
220+
<!-- Default style for Windows.UI.Xaml.Controls.TextBox -->
221+
<Thickness x:Key="TextBoxTopHeaderMargin">0,0,0,4</Thickness>
222+
221223
<Style x:Key="XamlDefaultTextBox"
222-
TargetType="TextBox">
224+
TargetType="TextBox">
223225
<Setter Property="MinWidth"
224226
Value="{ThemeResource TextControlThemeMinWidth}" />
225227
<Setter Property="MinHeight"
@@ -341,73 +343,94 @@
341343
<VisualState x:Name="ButtonCollapsed" />
342344
</VisualStateGroup>
343345
</VisualStateManager.VisualStateGroups>
344-
<Grid.ColumnDefinitions>
345-
<ColumnDefinition Width="*" />
346-
<ColumnDefinition Width="Auto" />
347-
</Grid.ColumnDefinitions>
348346
<Grid.RowDefinitions>
349347
<RowDefinition Height="Auto" />
350348
<RowDefinition Height="*" />
349+
<RowDefinition Height="Auto" />
351350
</Grid.RowDefinitions>
351+
<Grid.ColumnDefinitions>
352+
<ColumnDefinition Width="*" />
353+
<ColumnDefinition Width="Auto" />
354+
</Grid.ColumnDefinitions>
355+
<ContentPresenter x:Name="HeaderContentPresenter"
356+
Grid.Row="0"
357+
Grid.Column="0"
358+
Grid.ColumnSpan="2"
359+
Margin="{ThemeResource TextBoxTopHeaderMargin}"
360+
VerticalAlignment="Top"
361+
x:DeferLoadStrategy="Lazy"
362+
Content="{TemplateBinding Header}"
363+
ContentTemplate="{TemplateBinding HeaderTemplate}"
364+
FontWeight="Normal"
365+
Foreground="{ThemeResource SystemControlForegroundBaseHighBrush}"
366+
TextWrapping="Wrap"
367+
Visibility="Collapsed" />
352368
<Border x:Name="BackgroundElement"
353369
Grid.Row="1"
354-
Background="{TemplateBinding Background}"
370+
Grid.RowSpan="1"
371+
Grid.ColumnSpan="2"
355372
Margin="{TemplateBinding BorderThickness}"
356-
Opacity="{ThemeResource TextControlBackgroundRestOpacity}"
373+
Background="{TemplateBinding Background}"
357374
CornerRadius="{TemplateBinding CornerRadius}"
358-
Grid.ColumnSpan="2"
359-
Grid.RowSpan="1" />
375+
Opacity="{ThemeResource TextControlBackgroundRestOpacity}" />
360376
<Border x:Name="BorderElement"
361377
Grid.Row="1"
378+
Grid.RowSpan="1"
379+
Grid.Column="0"
380+
Grid.ColumnSpan="2"
381+
MinWidth="{ThemeResource TextControlThemeMinWidth}"
382+
MinHeight="{ThemeResource TextControlThemeMinHeight}"
383+
Background="{TemplateBinding Background}"
362384
BorderBrush="{TemplateBinding BorderBrush}"
363385
BorderThickness="{TemplateBinding BorderThickness}"
364-
CornerRadius="{TemplateBinding CornerRadius}"
365-
Grid.ColumnSpan="2"
366-
Grid.RowSpan="1" />
367-
<ContentPresenter x:Name="HeaderContentPresenter"
368-
x:DeferLoadStrategy="Lazy"
369-
Visibility="Collapsed"
370-
Grid.Row="0"
371-
Foreground="{ThemeResource SystemControlForegroundBaseHighBrush}"
372-
Margin="0,0,0,8"
373-
Grid.ColumnSpan="2"
374-
Content="{TemplateBinding Header}"
375-
ContentTemplate="{TemplateBinding HeaderTemplate}"
376-
FontWeight="Normal" />
386+
Control.IsTemplateFocusTarget="True"
387+
CornerRadius="{TemplateBinding CornerRadius}" />
377388
<ScrollViewer x:Name="ContentElement"
378389
Grid.Row="1"
379-
HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}"
380-
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
381-
VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}"
382-
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
383-
IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}"
384-
IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}"
385-
IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
390+
Grid.Column="0"
386391
Margin="{TemplateBinding BorderThickness}"
387392
Padding="{TemplateBinding Padding}"
388-
IsTabStop="False"
389393
AutomationProperties.AccessibilityView="Raw"
394+
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
395+
HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}"
396+
IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
397+
IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}"
398+
IsTabStop="False"
399+
IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}"
400+
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
401+
VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}"
390402
ZoomMode="Disabled" />
391-
<ContentControl x:Name="PlaceholderTextContentPresenter"
392-
Grid.Row="1"
393-
Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}"
394-
Margin="{TemplateBinding BorderThickness}"
395-
Padding="{TemplateBinding Padding}"
396-
IsTabStop="False"
397-
Grid.ColumnSpan="2"
398-
Content="{TemplateBinding PlaceholderText}"
399-
IsHitTestVisible="False" />
403+
<TextBlock x:Name="PlaceholderTextContentPresenter"
404+
Grid.Row="1"
405+
Grid.Column="0"
406+
Grid.ColumnSpan="2"
407+
Margin="{TemplateBinding BorderThickness}"
408+
Padding="{TemplateBinding Padding}"
409+
Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}"
410+
IsHitTestVisible="False"
411+
Text="{TemplateBinding PlaceholderText}"
412+
TextAlignment="{TemplateBinding TextAlignment}"
413+
TextWrapping="{TemplateBinding TextWrapping}" />
400414
<Button x:Name="DeleteButton"
401415
Grid.Row="1"
402-
Style="{StaticResource DeleteButtonStyle}"
403-
BorderThickness="{TemplateBinding BorderThickness}"
404-
Margin="{ThemeResource HelperButtonThemePadding}"
405-
IsTabStop="False"
406416
Grid.Column="1"
407-
Visibility="Collapsed"
408-
FontSize="{TemplateBinding FontSize}"
409417
MinWidth="34"
410-
VerticalAlignment="Stretch" />
418+
Margin="{ThemeResource HelperButtonThemePadding}"
419+
VerticalAlignment="Stretch"
420+
AutomationProperties.AccessibilityView="Raw"
421+
BorderThickness="{TemplateBinding BorderThickness}"
422+
FontSize="{TemplateBinding FontSize}"
423+
IsTabStop="False"
424+
Style="{StaticResource DeleteButtonStyle}"
425+
Visibility="Collapsed" />
426+
<ContentPresenter x:Name="DescriptionPresenter"
427+
Grid.Row="2"
428+
Grid.Column="0"
429+
Grid.ColumnSpan="2"
430+
x:Load="False"
431+
AutomationProperties.AccessibilityView="Raw"
432+
Content="{TemplateBinding Description}"
433+
Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}" />
411434
</Grid>
412435
</ControlTemplate>
413436
</Setter.Value>

0 commit comments

Comments
 (0)