실버라이트 팁

Behavior 로 구현한 Silverlight TextBox Watermark joseph 평점: 없음 조회: 3730
Xaml 적용 코드

<TextBox>
    <Interactivity:Interaction.Behaviors>
        <infra:Watermark Text="입력해주세요" Foreground="#FFAAAAAA" FontSize="10" />
    </Interactivity:Interaction.Behaviors>
</TextBox>

Watermark Behavior

public class Watermark : Behavior<TextBox>
{
    private bool _hasWatermark;
    private bool _isInnerRemoveText;
    private bool _isFocused;
    private Brush _textBoxForeground;
    private double _textBoxFontSize;

    public Brush Foreground { get; set; }
    public double FontSize { get; set; }

    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
                "WatermarkText",
                typeof(string),
                typeof(Watermark),
                new PropertyMetadata("Enter text here ..."));

    [Description("Gets or sets the watermark text")]
    public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }

    public Watermark()
    {
        this.FontSize = 12;
    }

    protected override void OnAttached()
    {
        base.OnAttached();

        AssociatedObject.GotFocus += GotFocus;
        AssociatedObject.LostFocus += LostFocus;
        AssociatedObject.Loaded += new RoutedEventHandler(AssociatedObject_Loaded);
        AssociatedObject.TextChanged += new TextChangedEventHandler(AssociatedObject_TextChanged);
        AssociatedObject.TextChanged += new TextChangedEventHandler(AssociatedObject_TextChanged1);
    }

    void AssociatedObject_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (string.IsNullOrEmpty(this.AssociatedObject.Text) && !_isInnerRemoveText && !_isFocused)
            SetWatermarkText();
    }

    void AssociatedObject_TextChanged1(object sender, TextChangedEventArgs e)
    {
        _isInnerRemoveText = false;
    }

    void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
    {
        _textBoxForeground = AssociatedObject.Foreground;
        _textBoxFontSize = AssociatedObject.FontSize;

        if (string.IsNullOrEmpty(this.AssociatedObject.Text) || this.AssociatedObject.Text == this.Text)
            SetWatermarkText();
    }

    private void LostFocus(object sender, RoutedEventArgs e)
    {
        if (AssociatedObject.Text.Length == 0)
            if (Text != null)
                SetWatermarkText();

        _isFocused = false;
    }

    private void GotFocus(object sender, RoutedEventArgs e)
    {
        if (_hasWatermark)
            RemoveWatermarkText();

        _isFocused = true;
    }

    private void RemoveWatermarkText()
    {
        AssociatedObject.Foreground = _textBoxForeground;
        AssociatedObject.FontSize = _textBoxFontSize;
        AssociatedObject.Text = "";
        _hasWatermark = false;
        _isInnerRemoveText = true;
    }

    private void SetWatermarkText()
    {
        AssociatedObject.Foreground = Foreground;
        AssociatedObject.FontSize = FontSize;
        AssociatedObject.Text = Text;
        _hasWatermark = true;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        AssociatedObject.GotFocus -= GotFocus;
        AssociatedObject.LostFocus -= LostFocus;
    }
}

태그 : Behavior silverlight TextBox watermark
작성자 정보
joseph
Level 16
 [EXP.62/70]

메일:  비공개
글등록 +12 96 덧글등록 +3 91
자기소개
30대 유부남
글 공유하기 |
  tweet facebook
2012-02-07 오후 5:00:15
나도한마디
사용자
MY            [2012-02-09]
Level 1
 [EXP.11/16]
TextBox Watermark 쉽게 만드는 법 찾고 있었는데..... 이런 소중한 자료를 ^0^ 감사합니다.
사용자
joseph            [2012-02-10]
Level 16
 [EXP.62/70]
도움이 되셨다니 다행이네요
태그로 엮인글
[C#.NET Q&A] C# textBox 줄 간격 질문입니다. (텍스트 박스, 줄간격,여백)  프린이
[구인&교육정보] [외국계 AI솔루션 기업] Technical Support Engineer 채용  연민의굴레
[WPF Q&A] Grid 안에 위치한 TextBox 가 입력된 글자에 의해 Width 가 변합니다...[3]+2  비가와요
[C#.NET Q&A] textbox에 대해 질문있습니다.  프롸우나
[C#.NET Q&A] C# 에서 Textbox 줄 갯수 제한 주는법이 뭔가요[1]+4  엘리엇
[C#.NET Q&A] C# textbox 질문입니다[4]  짜자란짜란
[C#.NET Q&A] MSSQL 데이터를 텍스트박스로  세힁
[C#.NET Q&A] C# tablelayoutpanel 질문드립니다.[1]+1  제스
[WPF Q&A] 터치키보드로 TextBox 숫자만 넣기[1]  hadug
[C#.NET Q&A] textbox나 label 의 text 값을 for 문으로 입력 받고 싶습니다..[2]+2  d20121201
글리스트
실버라이트 5로 만들어 보는 3D 예제  sky
실버라이트에서 이미지 보정 예제 (Pixel Manipulation in Silverlight)  sky
실버라이트 5 살펴보기 강좌 (10 Laps around Silverlight 5)[2]  sky
HTML 5 & Silverlight 5  sky
xap를 서버에 변경했는데 client에서는 변경이 안 되는 경우  시선
blend 단축키[1]  sa2랑
실버라이트에서 지원하는 미디어 형식이에요  sa2랑
Silverlight- Prism 라이브러리/툴킷/참고 예제 사이트입니다.  sky
[UX스터디 첫째주 자료] MS UX 프로그래밍의 소개 파일첨부 sky
vs2010에서 silverlight5프로젝트를 할때 open in expression blend 수정  시선
 ★현재글->   Behavior 로 구현한 Silverlight TextBox Watermark[1]+1  joseph
DrawingVisual 객체를 이용해서 컨트롤 그리기  Linus
[실버라이트 스터디 3주차] 데이터그리드의 Row Detail과 Javascript Access #2 파일첨부 시선
[실버라이트 스터디 3주차] 데이터그리드의 Row Detail과 Javascript Access #1 파일첨부 시선
[실버라이트 스터디 2주차] 데이터그리드에서 이미지 추가/수정/삭제[1]  시선
SECTION02. 익스프레션 블렌드의 레이아웃  짱묜
[실버라이트 스터디] 6월 25일 더디어 실버라이트 스터디를 시작했습니다[5]  시선
실버라이트4에서 XAML 디버깅하기[4]+1  Linus
STEP03. 익스프레션 블렌드의 툴 박스 III  짱묜
STEP03. 익스프레션 블렌드의 툴 박스 II[1]  짱묜
STEP03. 익스프레션 블렌드의 툴 박스 I[2]  짱묜