locked
Создание своего контрола объясните пожалуйста RRS feed

  • Общие обсуждения

  • В продолжении этой темы да и вообще. В WPF был контрол кем то написанный назывался он waterTextBox. Суть его в подсказках в TextBox - вых полях. Хорошо я им пользовался подключал пространства имён. И в xaml и в C#. Сейчас для Win8 я сделал просто в одном и том же месте и TextBlock с Opacity 0.2 И TextBox. И спокойно разрулил  всё это с помощью методов фокуса (потеря и GotFocus) Понятно что неправильно. И понятно что лучше сделать аналог для Win8и сделать это своим отдельным контролом.

    Теперь вопрос а как сделать свой контрол. Даже немного теории лучше.

    Т.е. так чтобы подключить его в проект. Ввести пространства имён в xaml и C# ну т.е. чтобы он получился нормальным. Допустим я путём долгих исследований и усилий всё таки сделаю Template который заменит весь C# код. Но как потом этот Template сделать отдельным контролом.


    Спасибо

    18 декабря 2012 г. 12:31

Все ответы

  • Эх, ну вот почему вы у меня не учились ;)

    Ладно, теперь о вашем вопросе. Создаете сборку:

    Добавляете в нее новый UserControl. Правый клик по проекту, Add -> New Item и выбираете во вкладке WPF элемент UserControl.

    Настраиваете его, так же, как вы до этого настраивали окна.

    Билдите. Подключаете эту сборку в любой другой проект. Ну а как использовать готовый контрол, вы уже знаете.

    18 декабря 2012 г. 15:19
    Отвечающий
  • Алексей наверное не заметил и ответил вам применительно к WPF.

    В приложениях магазина Windows суть та же. Вы либо создаете проект "Библиотека классов" и потом добавляете в проект либо "Элемент управления на основе шаблона", либо "Пользовательский элемент управления". Либо можно элемент управления добавить непосредственно в вашем проекте и тогда он будет доступен только в этом проекте. В первом случае результат можно распространять.

    Теперь по реализации вотермарка. Я не пробовал, но на вскидку - вы можете привязать через конвертер свойство Background TextBox'a к его же свойству Text. Если свойство Text пустое, то есть текста нет, то конвертер возвращает просто белый фон. Если текст есть, то возвращается ImageBrush с текстом вотермарка. Ну это так предложения по решению. Конечное решения на ваше усмотрение.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Изменено LXGDARK 18 декабря 2012 г. 16:18
    18 декабря 2012 г. 16:17
  • Да Алексей я уже тоже жалею, что не учился у Вас вживую :) Но я всё равно учусь у вас у всех по форумам по блогам по статьям (правда медленно идёт и скорее поверхностно) :). Спасибо всем, что помогаете. Без вас ничего не бы не получилось.

    Спасибо

    19 декабря 2012 г. 2:59
  • Вот, статья про то, как решить вашу задачу.

    19 декабря 2012 г. 9:21
    Отвечающий
  • Спасибо. Уже пробую


    Спасибо

    20 декабря 2012 г. 2:03
  • Если захотите функционал, чтобы подсказка не отображалась только при введенном тексте (как мне подсказывали в комментах к статье), то надо вместо событий получения фокуса и его потери, подписываться на TextChanged и анализировать только наличие строки.

    20 декабря 2012 г. 3:10
    Отвечающий