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