欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > 内容正文

windows phone 水印TextBox

来源: 开发者 投稿于  被查看 31269 次 评论:37

windows phone 水印TextBox


原理:在失去焦点和获取焦点的时候,判断Text值是否为空或者是否与水印值相同,然后修改TextBox中的Text和Foreground。

代码如下:

/* ==============================================================================
 2   * 类名称:WatermarkTextBox
 3   * 类描述:
 4   * 创建人:neoyee
 5   * 创建时间:2014/2/25 17:24:11
 6   * 修改人:
 7   * 修改时间:
 8   * 修改备注:
 9   * @version 1.0
10   * ==============================================================================*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using Windows.UI;


namespace WP8.Controls
{
    public sealed class WatermarkTextBox : TextBox
    {
        private static readonly DependencyProperty WatermarkTextProperty =
              DependencyProperty.Register("WatermarkText", typeof(string), typeof(WatermarkTextBox), new PropertyMetadata(string.Empty, new PropertyChangedCallback(WatermarkTextChanged)));


        private static readonly DependencyProperty WatermarkForegroundProperty =
            DependencyProperty.Register("WatermarkForeground", typeof(SolidColorBrush), typeof(WatermarkTextBox), new PropertyMetadata(new SolidColorBrush(Colors.Black)));

        private static readonly DependencyProperty WatermarkBackgroundProperty =
            DependencyProperty.Register("WatermarkBackground", typeof(SolidColorBrush), typeof(WatermarkTextBox), new PropertyMetadata(new SolidColorBrush(Colors.White)));

        private static readonly DependencyProperty NormalForegroundProperty =
            DependencyProperty.Register("NormalForeground", typeof(SolidColorBrush), typeof(WatermarkTextBox), new PropertyMetadata(new SolidColorBrush(Colors.Black), NormalForegroundPropertyChanged));

        private static readonly DependencyProperty NormalBackgroundProperty =
           DependencyProperty.Register("NormalBackground", typeof(SolidColorBrush), typeof(WatermarkTextBox), new PropertyMetadata(new SolidColorBrush(Colors.White)));

        private static void NormalForegroundPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
        {
            var watermarkTextBox = obj as WatermarkTextBox;
            if (watermarkTextBox != null)
                watermarkTextBox.NormalForegroundChanged((SolidColorBrush)args.NewValue);
        }

        private void NormalForegroundChanged(SolidColorBrush value)
        {
            Foreground = value;
        }

        public SolidColorBrush NormalBackground
        {
            get { return (SolidColorBrush)GetValue(NormalBackgroundProperty); }
            set { SetValue(NormalBackgroundProperty, value); }
        }

        public SolidColorBrush NormalForeground
        {
            get { return (SolidColorBrush)GetValue(NormalForegroundProperty); }
            set { SetValue(NormalForegroundProperty, value); }
        }
        public SolidColorBrush WatermarkBackground
        {
            get { return (SolidColorBrush)GetValue(WatermarkBackgroundProperty); }
            set { SetValue(WatermarkBackgroundProperty, value); }
        }
        public SolidColorBrush WatermarkForeground
        {
            get { return (SolidColorBrush)GetValue(WatermarkForegroundProperty); }
            set { SetValue(WatermarkForegroundProperty, value); }
        }

        public string WatermarkText
        {
            get { return (string)GetValue(WatermarkTextProperty); }
            set { SetValue(WatermarkTextProperty, value); }
        }

        public WatermarkTextBox()
        {
            this.LostFocus += WatermarkTextBox_LostFocus;
            this.GotFocus += WatermarkTextBox_GotFocus;
            this.TextChanged += WatermarkTextBox_TextChanged;
            if (string.IsNullOrEmpty(this.Text))
            {
                this.Text = WatermarkText;
                Foreground = WatermarkForeground;
            }

        }

        void WatermarkTextBox_TextChanged(object sender, TextChangedEventArgs e)
        {

            if (Text == WatermarkText)
            {
                this.Text = WatermarkText;
                Foreground = WatermarkForeground;
            }
            else if (Text != WatermarkText)
            {
                Foreground = NormalForeground;
            }
        }

        private static void WatermarkTextChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
        {
            ((WatermarkTextBox)obj).WatermarkTextChanged(args.OldValue, args.NewValue);
        }

        private void WatermarkTextChanged(object OldValue, object NewValue)
        {
           

        }

        void WatermarkTextBox_GotFocus(object sender, RoutedEventArgs e)
        {
            if (this.Text == WatermarkText && Foreground == WatermarkForeground)
            {
                this.Text = string.Empty;
                Foreground = NormalForeground;
            }
        }

        void WatermarkTextBox_LostFocus(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrEmpty(this.Text) || Text == WatermarkText)
            {
                this.Text = WatermarkText;
                Foreground = WatermarkForeground;
            }
        }
    }
}
相关频道:

用户评论