Я ищу способ добавить заполнитель текста в текстовое поле, как вы можете с помощью текстового поля в HTML5.
Т.е. если в текстовом поле нет текста, то он добавляет текст Enter some text here
, когда пользователь нажимает на него, текст заполнителя исчезает и позволяет пользователю вводить свой собственный текст, а если текстовое поле теряет фокус, а текст все еще отсутствует, тогда заполнитель добавлен обратно в текстовое поле.
c#
wpf
placeholder
Boardy
источник
источник
Ответы:
Разве это не было бы что-то вроде этого:
Это просто псевдокод, но концепция есть.
источник
RemoveText
иAddText
метод должен бытьpublic void
, пропуская пустоту . И, как сказал @BibaswannBandyopadhyay,RemoveText
метод может быть таким:if (myTxtbx.Text == "Enter text here...") {myTxtbx.Text = "";}
Вы можете использовать это, это работает для меня и является чрезвычайно простым решением.
Использование:
источник
<ControlTemplate.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="FocusManager.FocusedElement" TargetName="textSource" Value="{Binding RelativeSource={RelativeSource Self}}" /> </Trigger> </ControlTemplate.Triggers>
TextWrapping="wrap"
оба тега TextBox в Style, если вы хотите создать многострочный TextBox с текстом Placeholder, как я.<TextBox Text="{Binding Path=Text, RelativeSource=RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="textSource" Background="Transparent" Panel.ZIndex="2" MaxLength="{TemplateBinding MaxLength}" />
. В вашем случае вам, вероятно, нужно добавитьAcceptsReturn="{TemplateBinding AcceptsReturn}"
Вместо того чтобы обрабатывать события ввода и фокусировки фокуса, чтобы установить и удалить текст-заполнитель, можно использовать функцию Windows SendMessage, чтобы отправить
EM_SETCUEBANNER
сообщение в наше текстовое поле, чтобы выполнить работу за нас.Это можно сделать с помощью двух простых шагов. Для начала нам нужно раскрыть
SendMessage
функцию Windows .Затем просто вызовите метод с дескриптором нашего текстового поля, значением EM_SETCUEBANNER и текстом, который мы хотим установить.
Ссылка: Установить заполнитель текста для текстового поля (текст подсказки)
источник
Добавьте этот класс в ваш проект и постройте свое решение. Нажмите на Toolbox в Visual Studio, вы увидите новый компонент текстового поля с именем PlaceholderTextBox. Удалите текущее текстовое поле в форме дизайна и замените PlaceHolderTextBox.
PlaceHolderTextBox имеет свойство PlaceHolderText. Установите любой текст, который вы хотите, и хорошего дня :)
источник
Text
свойства (например, текстовое поле, используемое для фильтрации списка), заполнитель будет использоваться для фильтрации. Значение заполнителя следует использовать только для отображения, поэтому не рекомендуетсяText
временно заменять свойство.using System; using System.Drawing; using System.Windows.Forms;
Спасибо за это!Это не мой код, но я часто его использую, и он отлично работает ... ТОЛЬКО XAML
источник
DataTrigger
его следующимMultiDataTrigger
, по моему скромному мнению, он будет работать еще лучше:<MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsFocused, ElementName=Textbox}" Value="false" /><Condition Binding="{Binding Text, ElementName=Textbox}" Value="" /></MultiDataTrigger.Conditions><MultiDataTrigger.Setters> <Setter Property="Visibility" Value="Visible"/></MultiDataTrigger.Setters></MultiDataTrigger>
Прилагаемые свойства к спасению:
Использование:
источник
PlaceholderColor
с именемtypeof(Brush)
. Затем изменитеtextBox.Foreground
свойство вShowPlaceholder
методе и восстановите его обратно вHidePlaceholder
методе.Хотя использование
EM_SETCUEBANNER
сообщения, вероятно, самое простое, мне не нравится то, что текст-заполнитель исчезает, когда элемент управления получает фокус. Это моя любимая мозоль, когда я заполняю формы. Я должен нажать на нее, чтобы вспомнить, для чего это поле.Итак, вот еще одно решение для WinForms. Он перекрывает
Label
верхнюю часть элемента управления, которая исчезает только тогда, когда пользователь начинает печатать.Это, конечно, не пуленепробиваемый. Он принимает любые
Control
, но я проверял только сTextBox
. Может потребоваться модификация для работы с некоторыми элементами управления. Метод возвращаетLabel
элемент управления в случае, если вам нужно немного изменить его в конкретном случае, но это может никогда не понадобиться.Используйте это так:
Вот метод:
источник
На основании ответа ExceptionLimeCat, улучшение:
источник
Вы можете получить значение по умолчанию
Template
, изменить его, наложив aTextBlock
, и использовать aStyle
для добавления триггеров, которые скрывают и показывают его в нужных состояниях.источник
Это будет означать, что у вас есть кнопка, которая позволяет вам выполнять действия, такие как вход в систему или что-то еще. Перед тем, как выполнить действие, вы проверяете, заполнено ли текстовое поле. Если нет, оно заменит текст.
Это немного глупо, но проверять текст на предмет значения, которое вы ему даете, - лучшее, что я могу сделать, а не так хорошо в c #, чтобы найти лучшее решение.
источник
источник
Я придумал метод, который работал для меня, но только потому, что я хотел использовать имя текстового поля в качестве заполнителя. Увидеть ниже.
источник
Вот и я с этим решением, вдохновленным @Kemal Karadag.
Я заметил, что каждое решение, опубликованное здесь, опирается на фокус,
Хотя я хотел, чтобы мой заполнитель был точным клоном стандартного заполнителя HTML в Google Chrome.
Вместо того, чтобы скрывать / показывать заполнитель, когда окно сфокусировано,
Я скрываю / показываю заполнитель в зависимости от длины текста поля:
Если поле пусто, отображается местозаполнитель, а при вводе в поле заполнитель исчезает.
Так как он унаследован от стандартного TextBox, вы можете найти его в вашей панели инструментов!
источник
Попробуйте следующий код:
источник
txtUsuario.Attributes.Add ("заполнитель", "текст");
источник
вы также можете сделать это, если щелкнуть мышью, предположим, что ваш заполнитель текста "User_Name"
источник
источник
Вместо использования свойства .Text TextBox я наложил TextBlock с помощью заполнителя. Я не мог использовать свойство .Text, потому что оно было привязано к событию.
XAML:
VB.NET
Результат:
источник
Вы также можете попробовать таким образом ..
вызвать функцию
написать эту функцию
источник
Есть ЛУЧШЕЕ решение, но самое простое решение здесь: установите текстовое поле на желаемую строку, затем создайте функцию, которая удаляет текст, запустите эту функцию в текстовом поле.
источник
Я написал настраиваемый элемент управления многократного использования, возможно, он может помочь кому-то, кому необходимо реализовать несколько текстовых полей-заполнителей в своем проекте.
Вот пользовательский класс с примером реализации экземпляра, который вы можете легко протестировать, вставив этот код в новый проект winforms, используя VS:
источник
Очень эффективное решение здесь для управления WindowsForms TextBox. (не уверен насчет XAML).
Это также будет работать в режиме Multliline.
Возможно, он может быть расширен для других элементов управления, например, для элемента управления ComboBox (не проверено)
источник
Работает как шарм.
источник