|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Всем привет. Подскажите за такую вещь: Нужно текстовое поле, в котором нужны водяные знаки (это такая подсказка, которая выводится серым цветом, когда в поле ничего нет, MS называет это CUE Banner). Нашёл несколько реализаций. Самая простая и понятная вот такая: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Этот вариант мне нравится простотой реализации. Но его сложно использовать: строка подсказки и логика её замены зашиты в объекты. Не будешь же писать на каждое текстовое поле по 25 строк XAML-а. А если их на форме десять? Есть и понавороченней, типа вот такого: http://www.codeproject.com/Articles/101975/Building-a-Search-Text-Box-Control-with-WPF Использовать - удобно: Код: xml 1.
Но геморой - надо делать библиотеку, или подцеплять её к проекту. Хотелось бы иметь что-то среднее. Подцепил к проекту CS-файл, взял оттуда контрол в одну строку. Или взял стандартный TextBox, и подцепил к нему какой-нибудь стиль. Как бы так сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 13:49 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Что мешает для первого случая вынести браш и стиль в ресурсы и использовать для нужных текстбоксов? Что мешает сделать свой контрол на базе текстбокса? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 13:53 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Shocker.Pro, текст-то везде разный. Т.о. на каждый текстбокс будет по 2 ресурса. Зачем? Если бы можно было сделать 10 ресурсов со строками, один параметризированный ресурс браша и один ресурс стиля - было бы отлично. Но как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 14:14 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Вот такую конструкцию придумал, но что-то не получается выражение для Binding-а написать: Код: xml 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.
Вот такая ошибка: System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.TextBox', AncestorLevel='1''. BindingExpression:Path=Tag; DataItem=null; target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String') ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 15:32 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Так, естественно, ничего не выйдет. Можно просто назначать тестбоксу другой шаблон, состоящий, собственно, из этого же текстбокса и грида с брашем, а привязку текста делать к тому же Tag-у, ну или, скажем к собственному AttachedProperty через TemplatedParent, ну а шаблон разместить в ресурсах. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:35 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Shocker.ProТак, естественно, ничего не выйдет. Можно просто назначать тестбоксу другой шаблон, состоящий, собственно, из этого же текстбокса и грида с брашем, а привязку текста делать к тому же Tag-у, ну или, скажем к собственному AttachedProperty через TemplatedParent, ну а шаблон разместить в ресурсах. второе будет самым правильным. Использовать свойство Tag как по мне, не очень правильно и моветон. Одному богу известно, зачем вообще его создали. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:51 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Shocker.ProТак, естественно, ничего не выйдет. Почему? Shocker.ProМожно просто назначать тестбоксу другой шаблон, состоящий, собственно, из этого же текстбокса и грида с брашем, а привязку текста делать к тому же Tag-у, ну или, скажем к собственному AttachedProperty через TemplatedParent, ну а шаблон разместить в ресурсах. Пардон, не понял, не можешь пояснить кодом? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:57 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Roman MejtesИспользовать свойство Tag как по мне, не очень правильно и моветон. Одному богу известно, зачем вообще его создали. Тут ты не прав. Иногда надо сделать чтнб, что не помещается в рамки. Свойство Tag часто помогает. Особенно оно годится для новичков, которым некогда разбираться, как сделать что-то заковыристое, а через Tag можно забить гвоздик. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:59 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
13thможешь пояснить кодом?В принципе - да, свойства браша нельзя прибайндить к свойствам контрола, так как браш не находится в визуальном дереве. Поэтому предлагаю немного другую компоновку Код: xml 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.
Причем тут, в отличие от первого примера, возможно настраивать Background для текстбокса. При необходимости - добавить нужные байндинги для свойств текстбокса, который находится внутри шаблона. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 23:14 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Shocker.Pro13thможешь пояснить кодом?В принципе - да, свойства браша нельзя прибайндить к свойствам контрола, так как браш не находится в визуальном дереве. Поэтому предлагаю немного другую компоновку Код: xml 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.
Причем тут, в отличие от первого примера, возможно настраивать Background для текстбокса. При необходимости - добавить нужные байндинги для свойств текстбокса, который находится внутри шаблона. не хочу ни кого обижать, но это хрень, а не шаблон для TextBox'а, у вас получается замкнутый круг, TextBox В TextBox'е. вообще TextBox в своём роде уникальный контрол, уникален он тем, что в шаблоне его внутренняя часть ни как не декларирована, вместо этого, берёт TemplatePart этого шаблона, он имеет тип ScrollViewer и имя PART_ContentHost, он является неотъемлемой частью шаблона. простейший шаблон TextBox'а выглядит след. образом: Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
когда у экземпляра TextBox, будет вызван метод ApplyTemplate(), в методы осуществляется поиск элемента шаблона PART_ContentHost, и в коде задается его содержимое. Кстати, с куем есть еще 1 вариант, на подбие работы фокуса и валидации, можно поверх любого котрола размещать адорнен. + этого метода в том, что нам не надо менять шаблон элементов управления вообще, такой способ будет работать со всеми контролами без исключения (с ComboBox'ами, к примеру) и будет максимально универсальный. В качестве свойства с контентов куя лучше использовать не string, а object, а для представления в UI, не TextBlock, а ContentPresenter. Это даст более широкие возможности для управления содержимым куя. Если в свойстве будет строка, то ContentPresenter отобразит её как TextBlock (или AccessText), если содержимое будет UIElement, то оно отобразится как есть. Аналогичным образом работает ToolTip. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 05:32 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Roman Mejtesу вас получается замкнутый круг, TextBox В TextBox'еТак я и хочу сохранить текстбокс как текстбокс. С нужным поведением и визуализацией. В частности, текстбокс поддерживает темы виндов - переключи-ка на "классическую" - мой вариант классическим станет, твой - нет. То есть я просто взял текстбокс и добавил к нему надпись. Можно было сделать и на адорнере, но это - рабочий вариант "на коленке" на базе примера ТС. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 09:12 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Shocker.ProRoman Mejtesу вас получается замкнутый круг, TextBox В TextBox'еТак я и хочу сохранить текстбокс как текстбокс. С нужным поведением и визуализацией. В частности, текстбокс поддерживает темы виндов - переключи-ка на "классическую" - мой вариант классическим станет, твой - нет. То есть я просто взял текстбокс и добавил к нему надпись. Можно было сделать и на адорнере, но это - рабочий вариант "на коленке" на базе примера ТС.не использую стандартные шаблоны контролов, WPF для чего существует? чтоб всё было стандартным? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 10:13 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Roman Mejtesне использую стандартные шаблоны контролов, WPF для чего существует? чтоб всё было стандартным? :)Ну если ты не используешь - это ж не значит, что другие не используют? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 10:55 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Похоже, с водяными знаками всё плохо. Придётся отдельный контрол написать, и его использовать, а не хотелось. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 16:15 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
13thвсё плохоа чем не понравился мой вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 16:32 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Shocker.Pro, во-первых, внешний контрол по размерам не совпадает с тем, что накрывается. Во-вторых, у меня не получилось спрятать его во время фокуса. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 18:27 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Roman Mejtes, У меня 500 edito-ов, написанных на ATL, я сейчас добавлю ещё дюжину, и хотелось бы, что бы они были похожими на предыдущие. Кстати, выдел пример с универсальным адорнером, но блин, сколько же гемора из-за пяти-шести водяных знаков! Право же, лучше скопипастить сотню строк XAML-а. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 18:31 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
13thShocker.Pro, во-первых, внешний контрол по размерам не совпадает с тем, что накрывается. Во-вторых, у меня не получилось спрятать его во время фокуса.Ну, ёмаё, вы ж не просили законченное решение. По поводу фокуса - добавляете еще один триггер в конце и вуаля. Код: xml 1. 2. 3.
По поводу размеров не очень понятна проблема, но, полагаю, все тоже легко решаемо ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 18:43 |
|
TextBox, CUE Banner, повторное использование
|
|||
---|---|---|---|
#18+
Shocker.Pro, спасибо за подсказку с фокусом. Я чуть позже попробую, напишу, что получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 13:28 |
|
|
start [/forum/topic.php?fid=21&fpage=11&tid=1440649]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
145ms |
get tp. blocked users: |
2ms |
others: | 242ms |
total: | 508ms |
0 / 0 |