0 / 0 / 0
Регистрация: 08.04.2019
Сообщений: 10
1

Серая подсказка внутри TextBox. Авторизация

17.01.2020, 13:21. Показов 29982. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как сделать подсказку внутри TextBox в WPF?
Подсказка - серый текст внутри TextBox,который есть пока он пуст и пропадает при вводе текста
Серая подсказка внутри TextBox. Авторизация
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2020, 13:21
Ответы с готовыми решениями:

Серая подсказка внутри TextBox
Добрый вечер господа и коллеги! Прошу пощения за смешной вопрос, но все же, как сделать...

Всплывающая подсказка с изображением внутри
Доброй ночи всем, кто не спит! Подскажите пожалуйста, каким образом в WP реализовать всплывающие...

Подсказка в textbox
Как сделать подсказку в textbox? Например как в вконтакте поиск, при нажатии надпись "поиск"...

Подсказка в textbox
нашёл в сети вагон и маленькую тележку способов, которые слишком долгие и ухищрённые. у текстбокса...

15
1514 / 905 / 328
Регистрация: 17.05.2015
Сообщений: 3,417
17.01.2020, 13:23 2
yulya01chaykina, сделать самому геморно, контрол называется watermark textbox
вот готовый лучше взять
https://stackoverflow.com/ques... n-winforms
0
Фрилансер
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
17.01.2020, 14:17 3
Цитата Сообщение от Рядовой Посмотреть сообщение
yulya01chaykina, сделать самому геморно, контрол называется watermark textbox
вот готовый лучше взять
раздел WPF автор четко говорит о WPF а вы ему про Winforms)))

вот то что нужно:
https://stackoverflow.com/ques... er-textbox
1
Модератор
Эксперт .NET
15456 / 10703 / 2784
Регистрация: 21.04.2018
Сообщений: 31,517
Записей в блоге: 2
17.01.2020, 14:29 4
Рядовой, FateOri, а по форуму поискать слабо было?


Цитата Сообщение от yulya01chaykina Посмотреть сообщение
Как сделать подсказку внутри TextBox в WPF?
Посмотрите примеры:
здесь Placeholder в TextBox
и здесь Текст подсказки в поле TextBox [WPF, Элд Хасп]
1
Фрилансер
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
17.01.2020, 14:36 5
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Посмотрите примеры:
здесь Placeholder в TextBox
и здесь Текст подсказки в поле TextBox [WPF, Элд Хасп]
Attached Property это лучшее решение чем те что приведены по ссылкам))
0
Модератор
Эксперт .NET
15456 / 10703 / 2784
Регистрация: 21.04.2018
Сообщений: 31,517
Записей в блоге: 2
17.01.2020, 14:51 6
Цитата Сообщение от FateOri Посмотреть сообщение
Attached Property это лучшее решение чем те что приведены по ссылкам))
Согласен.
Тогда для баланса дополните тему Placeholder в TextBox

Добавлено через 7 минут
FateOri, хотя не уверен, что AP лучше.
Где, с каким элементов кроме TextBox - это может использоваться?
А если больше нигде,то зачем нужно это AP.
Лучше создать наследника TextBox с таким свойством.
0
Рядовой
17.01.2020, 15:21
  #7

Не по теме:

Цитата Сообщение от FateOri Посмотреть сообщение
раздел WPF автор четко говорит о WPF а вы ему про Winforms)))
да я че то даже раздел не глянул какой)

0
Фрилансер
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
17.01.2020, 16:50 8
Цитата Сообщение от Элд Хасп Посмотреть сообщение
FateOri, хотя не уверен, что AP лучше.
Где, с каким элементов кроме TextBox - это может использоваться?
А если больше нигде,то зачем нужно это AP.
так в том то и дело что не надо из-за одной надстройки создавать отдельный UC скопировал AP и пользуйся на здоровье
ну это холиварная тема))
1
1577 / 583 / 183
Регистрация: 05.12.2015
Сообщений: 935
17.01.2020, 16:55 9
работает на семерке
на десятке не проверял.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    public class xTextBox : TextBox
    {
        public xTextBox()
        {
            Loaded += delegate
              {
                  TextBlock placetext = new TextBlock() { Foreground = SystemColors.GrayTextBrush };
                  Binding bind = new Binding( "PlaceHolder" );
                  bind.Source = this;
                  placetext.SetBinding( TextBlock.TextProperty, bind );
 
                  ContentControl host = Template.FindName( "PART_ContentHost", this ) as ContentControl;
                  FrameworkElement tbw = host.Content as FrameworkElement;
 
                  Grid grid = new Grid();
                  host.Content = grid;
                  grid.Children.Add( placetext );
                  grid.Children.Add( tbw );
 
                  this.TextChanged += delegate
                    {
                        placetext.Opacity = string.IsNullOrWhiteSpace( Text ) ? 1 : 0;
                    };
              };
        }
        public string PlaceHolder
        {
            get { return (string) GetValue( PlaceHolderProperty ); }
            set { SetValue( PlaceHolderProperty, value ); }
        }
        public static readonly DependencyProperty PlaceHolderProperty = DependencyProperty.Register( "PlaceHolder", typeof( string ), typeof( xTextBox ), new PropertyMetadata( null ) );
    }
1
Модератор
Эксперт .NET
15456 / 10703 / 2784
Регистрация: 21.04.2018
Сообщений: 31,517
Записей в блоге: 2
17.01.2020, 17:01 10
FateOri, если нетрудно, создайте пост с реализацией, объяснением и примером использования.

Добавлено через 5 минут
proa33, я делал ещё похожий вариант, но с созданием кисти из элемента и установки этой кисти в фон TextBox.
Надо поискать в разделе этот пример.
0
Фрилансер
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
17.01.2020, 17:04 11
Цитата Сообщение от Элд Хасп Посмотреть сообщение
FateOri, если нетрудно, создайте пост с реализацией, объяснением и примером использования.
а смысл? по ссылке на SO много разных реализаций копировать их все глупо
однозначного ответа что лучше выбрать все равно нет
так что пусть кому что больше нравится то и выбирает
0
Модератор
Эксперт .NET
15456 / 10703 / 2784
Регистрация: 21.04.2018
Сообщений: 31,517
Записей в блоге: 2
18.01.2020, 00:23 12
Цитата Сообщение от FateOri Посмотреть сообщение
а смысл?
Смысл - это вежливость и соблюдение правил
Цитата из правил
5.20 Запрещено публиковать ответы на вопросы или решения задач с форума на другие сайты и давать на них ссылки в качестве ответа.
..................
5.24 Запрещено давать ответы в виде одной ссылки или списка ссылок. В этом случае необходимо привести ответ полностью и оставить ссылку на источник. Исключением являются ссылки на страницы самого форума.
0
Фрилансер
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
18.01.2020, 01:10 13
Цитата Сообщение от Элд Хасп Посмотреть сообщение
5.20 Запрещено публиковать ответы на вопросы или решения задач с форума на другие сайты и давать на них ссылки в качестве ответа.
я один не понимаю что тут написано?)))

Цитата Сообщение от Элд Хасп Посмотреть сообщение
5.24 Запрещено давать ответы в виде одной ссылки или списка ссылок. В этом случае необходимо привести ответ полностью и оставить ссылку на источник. Исключением являются ссылки на страницы самого форума.
вроде всегда можно было на SO ссылки давать
ну окей понял больше не буду никаких ссылок оставлять во избежание так сказать
0
Модератор
Эксперт .NET
15456 / 10703 / 2784
Регистрация: 21.04.2018
Сообщений: 31,517
Записей в блоге: 2
18.01.2020, 02:13 14
Цитата Сообщение от FateOri Посмотреть сообщение
вроде всегда можно было на SO ссылки давать
ну окей понял больше не буду никаких ссылок оставлять во избежание так сказать
Не надо кидаться в крайности.

Поймите, что здесь более 90% начинающих и им одной ссылки мало.
Вы считаете, что знаете где искать решение - приведите его и укажите ссылку откуда его взяли.
Это же не трудно.
Если можете то объясните нюансы применения, реализации решения.

В больших темах, где идёт обширное обсуждение, конечно, просто ссылки достаточно, ввиду квалификации обсуждающих.
Или когда видно, что решение проблемы ищет человек с достаточной квалификацией, чтобы разобраться с реализацией по ссылке.
1
Фрилансер
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
18.01.2020, 10:57 15
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Не надо кидаться в крайности.
фух спасибо успокоили
я то думал что правило строгое и ко мне санкции будут применяться))

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Поймите, что здесь более 90% начинающих и им одной ссылки мало.
Вы считаете, что знаете где искать решение - приведите его и укажите ссылку откуда его взяли.
а, окей, в большинстве случаев я вроде так и делаю
если ссылки мало то конечно я помогу но тут то нет однозначно лучшего варианта
0
Модератор
Эксперт .NET
15456 / 10703 / 2784
Регистрация: 21.04.2018
Сообщений: 31,517
Записей в блоге: 2
18.01.2020, 14:06 16
Цитата Сообщение от Элд Хасп Посмотреть сообщение
proa33, я делал ещё похожий вариант, но с созданием кисти из элемента и установки этой кисти в фон TextBox.
Надо поискать в разделе этот пример.
Настраиваемы элемент:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
    /// <summary>TextBox с водяной надписью на фоне, 
    /// если Text пустое или из пробело</summary>
    public class PlaceTextBox : TextBox
    {
 
        /// <summary>Text on background</summary>
        public string PlaceText
        {
            get => (string)GetValue(PlaceTextProperty);
            set => SetValue(PlaceTextProperty, value);
        }
 
        // Using a DependencyProperty as the backing store for PlaceText.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty PlaceTextProperty =
            DependencyProperty.Register(nameof(PlaceText), typeof(string), typeof(PlaceTextBox),
                new PropertyMetadata("Start typing", (d, e) => ((PlaceTextBox)d).PlaceChanged()));
 
 
        /// <summary>Brush for PlaceText</summary>
        public Brush PlaceBrush
        {
            get => (Brush)GetValue(PlaceBrushProperty);
            set => SetValue(PlaceBrushProperty, value);
        }
 
        // Using a DependencyProperty as the backing store for PlaceBrush.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty PlaceBrushProperty =
            DependencyProperty.Register(nameof(PlaceBrush), typeof(Brush), typeof(PlaceTextBox),
                new PropertyMetadata(Brushes.LightGray, (d, e) => ((PlaceTextBox)d).PlaceChanged()));
 
 
        /// <summary>Margin for PlaceText</summary>
        public Thickness PlaceMargin
        {
            get => (Thickness)GetValue(PlaceMarginProperty);
            set => SetValue(PlaceMarginProperty, value);
        }
 
        // Using a DependencyProperty as the backing store for PlaceMargin.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty PlaceMarginProperty =
            DependencyProperty.Register(nameof(PlaceMargin), typeof(Thickness), typeof(PlaceTextBox),
                new PropertyMetadata(new Thickness(1), (d, e) => ((PlaceTextBox)d).PlaceChanged()));
 
 
        /// <summary>Text property value is empty</summary>
        public bool IsTextEmpty
        {
            get => (bool)GetValue(IsTextEmptyProperty);
            private set => SetValue(IsTextEmptyPropertyKey, value);
        }
 
        // Using a DependencyProperty as the backing store for IsTextEmpty.  This enables animation, styling, binding, etc...
        private static readonly DependencyPropertyKey IsTextEmptyPropertyKey =
            DependencyProperty.RegisterReadOnly(nameof(IsTextEmpty), typeof(bool), typeof(PlaceTextBox),
                new PropertyMetadata(true, (d, e) => ((PlaceTextBox)d).IsTextEmptyChanged((bool)e.NewValue)));
        public static readonly DependencyProperty IsTextEmptyProperty = IsTextEmptyPropertyKey.DependencyProperty;
 
        /// <summary>Метод применяющий одну из кистей
        /// при изменении свойства IsTextEmpty</summary>
        private void IsTextEmptyChanged(bool newValue)
        {
            IsInChanged = true;
            if (newValue)
            {
                /// Фон для пустого поля
                if (Background != BrushPlace)
                    Background = BrushPlace;
            }
            else
            {
                /// Фонт для поля с введённым текстом
                if (Background != BrushClean)
                    Background = BrushClean;
            }
            IsInChanged = false;
        }
 
 
 
 
 
        /// <summary>Метод рисующий кисть и применяющий её
        /// Должен вызываться при изменени любого из свойств: PlaceText, PlaceBrush, Background,
        /// ActualWidth, ActualHeight, FontFamily, FontStyle, FontWeight, FontStretch, FontSize</summary>
        private void PlaceChanged()
        {
            if (double.IsNaN(ActualWidth) || double.IsNaN(ActualHeight) || ActualWidth <= 0 || ActualHeight <= 0)
                return;
 
            //https://docs.microsoft.com/ru-ru/dotnet/framework/wpf/advanced/how-to-draw-text-to-a-control-background
 
            // Create a new DrawingGroup of the control.
            DrawingGroup drawingGroup = new DrawingGroup();
 
            // Open the DrawingGroup in order to access the DrawingContext.
            using (DrawingContext drawingContext = drawingGroup.Open())
            {
                // Create the formatted text based on the properties set.
                FormattedText formattedText = new FormattedText(
                    PlaceText,
                    CultureInfo.InvariantCulture,
                    FlowDirection.LeftToRight,
                    new Typeface(FontFamily, FontStyle, FontWeight, FontStretch),
                    FontSize,
                    Brushes.Black, // This brush does not matter since we use the geometry of the text. 
                    VisualTreeHelper.GetDpi(this).PixelsPerDip);
 
                // Build the geometry object that represents the text.
                Geometry textGeometry = formattedText.BuildGeometry(new Point(PlaceMargin.Left, PlaceMargin.Top));
 
 
                double width = Math.Max(ActualWidth, formattedText.Width + PlaceMargin.Left + PlaceMargin.Right);
                double height = Math.Max(ActualHeight, formattedText.Height + PlaceMargin.Top + PlaceMargin.Bottom);
 
                // Draw a rounded rectangle under the text that is slightly larger than the text.
                drawingContext.DrawRoundedRectangle(BrushClean, null, new Rect(new Size(width, height)), 0, 0);
 
                // Draw the outline based on the properties that are set.
                drawingContext.DrawGeometry(PlaceBrush, null, textGeometry);
 
                // Return the updated DrawingGroup content to be used by the control.
                //    return drawingGroup;
 
                BrushPlace = new DrawingBrush(drawingGroup);
            }
 
            /// Перерисовка актуальными кистями
            IsTextEmptyChanged(IsTextEmpty);
        }
 
 
 
        public PlaceTextBox() => BrushClean = Background;
 
        protected override void OnTextChanged(TextChangedEventArgs e)
        {
            base.OnTextChanged(e);
            /// Изменение свойства пустого значения
            IsTextEmpty = string.IsNullOrWhiteSpace(Text);
        }
 
        protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
        {
            /// Метод используется для прослушки изменений свойств в базовом классе
            base.OnPropertyChanged(e);
 
            /// Если "снаружи" изменилось значение свойства Background
            if (e.Property == BackgroundProperty && !IsInChanged)
            {
                /// Запомнить его и перерисовать фон
                BrushClean = Background;
                PlaceChanged();
            }
 
            /// Если изменилось одно из свойств
            else if (
                new DependencyProperty[] { ActualWidthProperty, ActualHeightProperty,
                    FontFamilyProperty, FontStyleProperty, FontWeightProperty,
                    FontStretchProperty, FontSizeProperty }.Contains(e.Property))
                /// Перерисовать фон
                PlaceChanged();
        }
 
 
        /// <summary>Кисть без текста</summary>
        private Brush BrushClean;
        /// <summary>Кисть с текстом</summary>
        private Brush BrushPlace;
        /// <summary>Изменение значения "изнутри"</summary>
        private bool IsInChanged;
 
    }
Применение
XML
1
2
        <local:PlaceTextBox Margin="10" FontSize="15" PlaceBrush="Coral" PlaceText="Пароль"
                            PlaceMargin="30,0,0,0" Background="Gray"/>
0
18.01.2020, 14:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2020, 14:06
Помогаю со студенческими работами здесь

Подсказка в TextBox
Здравствуйте, подскажите пожалуйста как реализовать подсказку в TextBox'е, искал в интернете не...

Подсказка в TextBox
Создаю форму регистрации. Нужно в textbox1 добавить подсказку &quot;Адрес электронной почты&quot;. Ходил по...

Всегда активная подсказка в textbox
Здравствуйте! Основная проблема заключается в том, что я хочу создать на заднем фоне в textbox...

Подсказка при наведении курсора на textbox
Помогите осуществить это!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru