wpf 질문) 힌트 텍스트 박스를 만드려 합니다...

윈폼만 주로 하다가 wpf를 처음하니 영 생각 처럼 안되네요.
안드로이드의 xml이랑도 좀 다른거 같고요 ㅠㅠㅠㅠ

일단 하고자 하는 것은 기존의 textbox에 힌트를 넣고 싶다는 것 입니다. 다른 사람들의 소스를 보니 스타일로 한 예시도 있던데 이게 좀 유동적이게 해야 되고 자주 사용 하다 보니(힌트 내용, 힌트 폰트, 힌트 색상 등등) 이것저것 해보는데 잘 안되네요.

internal class HintTextBox : TextBox
    {
        public static readonly DependencyProperty HintTextProperty =
            DependencyProperty.Register("HintText", typeof(string), typeof(HintTextBox),
                new PropertyMetadata("", new PropertyChangedCallback(HintChanged)));

        public string HintText
        {
            get => (string)GetValue(HintTextProperty);
            set => SetValue(HintTextProperty, value);
        }

        protected override void OnRender(DrawingContext drawingContext)
        {
            base.OnRender(drawingContext);
            if (this.Text == "")
            {
                FormattedText formattedText = new FormattedText(
                    HintText,
                    CultureInfo.GetCultureInfo("ko-KR"),
                    FlowDirection.LeftToRight,
                    new Typeface(this.FontFamily, this.FontStyle, this.FontWeight, this.FontStretch),
                    this.FontSize,
                    new SolidColorBrush(Color.FromRgb(203, 203, 203)),
                    VisualTreeHelper.GetDpi(this).PixelsPerDip
                    );

                drawingContext.DrawText(formattedText, new Point(16, Height / 2 - this.FontSize));

            }
        }

        protected override void OnTextChanged(TextChangedEventArgs e)
        {
            base.OnTextChanged(e);
        }

        private static void HintChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {

        }
    }

일단 이렇게 했습니다. textbox를 상속 받아서 거기에 힌트 속성을 추가한 다음 해당 컨트롤을 그릴 때 텍스트가 없다면 힌트를 그려주는 방식으로 하였습니다. 그렇지만 실제론 그려지지 않더라고요… 왜 안그려지는지도 모르겠고 디버깅해보니 잘 타는 듯 한데;;;

최근 8개월 정도 다른 개발하다가 c# 다시 잡으니 너무 어색하네요. 선배님들 도와주시면 감사하겠습니다.
(wpf mvvm databinding을 공부해서 적용하려고 하는데 wpf는 인터넷에 자료가 다른 개발에 비해 많이 적은거 같더라고요. 괜찮은 사이트나 공부 자료 있으면 알려주시면 감사하겠습니다.)

2개의 좋아요

Background 를 Transparent로 설정해보세요

3개의 좋아요

그저께 결국 다른 방법으로 만들었습니다.
그래도 답변 주셔서 감사합니다.

1개의 좋아요

@mincook 어떻게 만드셨는지도 소개해주시면 좋을 것 같아요!!

1개의 좋아요

이미 해결된 질문 같은데 다른 분들에게 공유 차원으로
Hint TextBox를 심플하게 한번 만들어 보았습니다.

Hint 내용, 색상, 크기, 폰트 설정을 할 수 있도록 DP로 제공하고
텍스트박스 Enable에 따라 Hint색상도 그에 맞게 자동 변경 되도록 간단하게 구현해 보았습니다.

전체 코드

code_check/QnA/WPF/HintTextBox at main · tyeom/code_check (github.com)


66

8개의 좋아요