Browse Source

Added implementation of Watermark for Textbox.

Dan Walmsley 10 years ago
parent
commit
fc76076c8a

+ 4 - 2
samples/TestApplication/Program.cs

@@ -340,8 +340,10 @@ namespace TestApplication
 								Foreground = SolidColorBrush.Parse("#727272"),
 								Margin = new Thickness(0, 0, 0, 10)
 							},
-							new TextBox { Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", Width = 200 },
-							new TextBox { AcceptsReturn = true, TextWrapping = TextWrapping.Wrap, Width = 200, Height = 150, Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est." },
+
+							new TextBox { Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", Width = 200},
+                            new TextBox { Width = 200, Watermark="Watermark"},
+                            new TextBox { AcceptsReturn = true, TextWrapping = TextWrapping.Wrap, Width = 200, Height = 150, Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est." },
 							new TextBlock
 							{
 								Margin = new Thickness(0, 40, 0, 0),

+ 9 - 0
src/Perspex.Controls/TextBox.cs

@@ -39,6 +39,9 @@ namespace Perspex.Controls
         public static readonly PerspexProperty<TextWrapping> TextWrappingProperty =
             TextBlock.TextWrappingProperty.AddOwner<TextBox>();
 
+        public static readonly PerspexProperty<string> WatermarkProperty =
+            PerspexProperty.Register<TextBox, string>("Watermark");
+
         private TextPresenter _presenter;
 
         static TextBox()
@@ -101,6 +104,12 @@ namespace Perspex.Controls
             set { SetValue(TextProperty, value); }
         }
 
+        public string Watermark
+        {
+            get { return GetValue(WatermarkProperty); }
+            set { SetValue(WatermarkProperty, value); }
+        }
+
         public TextWrapping TextWrapping
         {
             get { return GetValue(TextWrappingProperty); }

+ 27 - 11
src/Perspex.Themes.Default/TextBoxStyle.cs

@@ -8,6 +8,7 @@ using Perspex.Controls.Primitives;
 using Perspex.Controls.Templates;
 using Perspex.Media;
 using Perspex.Styling;
+using System.Reactive.Linq;
 
 namespace Perspex.Themes.Default
 {
@@ -58,19 +59,34 @@ namespace Perspex.Themes.Default
                 [~Border.BackgroundProperty] = control[~TemplatedControl.BackgroundProperty],
                 [~Border.BorderBrushProperty] = control[~TemplatedControl.BorderBrushProperty],
                 [~Border.BorderThicknessProperty] = control[~TemplatedControl.BorderThicknessProperty],
-                Child = new ScrollViewer
+
+                Child = new Panel
                 {
-                    [~ScrollViewer.CanScrollHorizontallyProperty] = control[~ScrollViewer.CanScrollHorizontallyProperty],
-                    [~ScrollViewer.HorizontalScrollBarVisibilityProperty] = control[~ScrollViewer.HorizontalScrollBarVisibilityProperty],
-                    [~ScrollViewer.VerticalScrollBarVisibilityProperty] = control[~ScrollViewer.VerticalScrollBarVisibilityProperty],
-                    Content = new TextPresenter
+                    Children = new Controls.Controls
                     {
-                        Name = "textPresenter",
-                        [~TextPresenter.CaretIndexProperty] = control[~TextBox.CaretIndexProperty],
-                        [~TextPresenter.SelectionStartProperty] = control[~TextBox.SelectionStartProperty],
-                        [~TextPresenter.SelectionEndProperty] = control[~TextBox.SelectionEndProperty],
-                        [~TextBlock.TextProperty] = control[~TextBox.TextProperty],
-                        [~TextBlock.TextWrappingProperty] = control[~TextBox.TextWrappingProperty],
+                        new TextBlock
+                        {
+                            Name="waterMark",
+                            Opacity=0.5,                            
+                            [~TextBlock.TextProperty] = control[~TextBox.WatermarkProperty],
+                            [~TextBlock.IsVisibleProperty] = control[~TextBox.TextProperty].Cast<string>().Select(x => (object)string.IsNullOrEmpty(x))
+                        },
+
+                        new ScrollViewer
+                        {
+                            [~ScrollViewer.CanScrollHorizontallyProperty] = control[~ScrollViewer.CanScrollHorizontallyProperty],
+                            [~ScrollViewer.HorizontalScrollBarVisibilityProperty] = control[~ScrollViewer.HorizontalScrollBarVisibilityProperty],
+                            [~ScrollViewer.VerticalScrollBarVisibilityProperty] = control[~ScrollViewer.VerticalScrollBarVisibilityProperty],
+                            Content = new TextPresenter
+                            {
+                                Name = "textPresenter",
+                                [~TextPresenter.CaretIndexProperty] = control[~TextBox.CaretIndexProperty],
+                                [~TextPresenter.SelectionStartProperty] = control[~TextBox.SelectionStartProperty],
+                                [~TextPresenter.SelectionEndProperty] = control[~TextBox.SelectionEndProperty],
+                                [~TextBlock.TextProperty] = control[~TextBox.TextProperty],
+                                [~TextBlock.TextWrappingProperty] = control[~TextBox.TextWrappingProperty],
+                            }
+                        }
                     }
                 }
             };