Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
2 / 2 / 0
Регистрация: 23.01.2013
Сообщений: 56
1

Создание UserControl

20.11.2016, 17:40. Показов 3454. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В качестве эксперимента, попробовал создать пользовательский контрол MyControl наследуемый от UserControl который имеет такой код xaml:
C#
1
2
3
4
5
6
7
8
9
10
11
12
<UserControl x:Class="DependencyProperties.MyControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:DependencyProperties"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Label Name="_label"></Label>
    </Grid>
</UserControl>
Хочется, чтобы он имел свойство Text типа string, с помощью которого он будет устанавливать _label.Contens. Создал DependencyProperty, зарегистрировал его:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        public static DependencyProperty TextProperty;
 
        static MyControl()
        {
            var metadata = new FrameworkPropertyMetadata(
                string.Empty, FrameworkPropertyMetadataOptions.AffectsRender);
            TextProperty = DependencyProperty.Register("Text",
                typeof(string), typeof(MyControl), metadata);
        }
 
        public string Text
        {
            get { return (string)_label.Content; }  // Сделал так но не уверен, что верно
            set { _label.Content = value; }
        }
Как когда создаешь DependencyProperty и регистрируешь его методом Register, ты таким образом получаешь возможность использовать его в xalm. Но если DependencyProperty устанавливается/читается методами SetValue/GetValue, то где тогда мне устанавливать _label.Contens? Решил устанавливать в свойстве Text контрола, но чего-то не кажется это верным. Или может быть ValidateValueCallback задействовать? В общем в моем случае, как сделать правильно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2016, 17:40
Ответы с готовыми решениями:

Кастомная кнопка в UserControl или UserControl со свойствами кнопки
Привет, пытаюсь запихнуть кастомную кнопку в Useк Control. Что-то ерунда какая-то получается. ...

DP UserControl внутри UserControl MVVM
Есть UC c DP Text &lt;Grid&gt; &lt;TextBlock HorizontalAlignment=&quot;Left&quot; Text=&quot;{Binding Text,...

Управление usercontrol из другого usercontrol
На форме размещено 2 usercontrol. Как управлять usercontrol из другого Добавлено через 22 часа...

UserControl
как добавить на Grid в WPF свой UserControl из DLL(UserControl для WPF) Добавлено через 1 час 33...

5
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
20.11.2016, 18:03 2
Цитата Сообщение от Cynic7 Посмотреть сообщение
Сделал так но не уверен, что верно
В студии есть сниппет для вставки зависимых свойств. Набираешь dep Ctrl+пробел и появится подсказка:
Создание UserControl

Дальше остаётся указать тип и имя переменной. В результате получишь код:
C#
1
2
3
4
5
6
7
8
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
    "Text", typeof (string), typeof (UserControl1), new PropertyMetadata(default(string)));
 
public string Text
{
    get { return (string) GetValue(TextProperty); }
    set { SetValue(TextProperty, value); }
}
Ну а отображение свойства в Label нужно делать через привязку
XML
1
<Label Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:UserControl1}}, Path=Text}" />
Естественно, local — алиас для пространства имён, в котором находится твой контрол
0
2 / 2 / 0
Регистрация: 23.01.2013
Сообщений: 56
20.11.2016, 18:17  [ТС] 3
Мне не совсем понятно, где в результате будет храниться значение моего свойства? В DependencyProperies? В _label.Content? Или в обоих местах?
И как-бы обойтись пока без привязок, ещё стр. 200 книги до привязок
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
20.11.2016, 18:19 4
Цитата Сообщение от Cynic7 Посмотреть сообщение
И как-бы обойтись пока без привязок, ещё стр. 200 книги до привязок
С привязок нужно начинать.
Твоё свойство будет "храниться" в DependencyProperty
0
2 / 2 / 0
Регистрация: 23.01.2013
Сообщений: 56
20.11.2016, 19:08  [ТС] 5
А на первых парах, без привязок нельзя обойтись?
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
20.11.2016, 19:22 6
Cynic7, чем раньше ты начнёшь вникать в механизм привязок, тем проще тебе будет продвигаться. Я — самоучка и советую, основываясь на своём опыте
0
20.11.2016, 19:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2016, 19:22
Помогаю со студенческими работами здесь

UserControl in WPF
Добрый день всем. Просерфил интернет в поисках ответа и помощи, но по существу ничего не нашел....

Наследование UserControl
Народ, может кто сталкивался с подобной проблемой... есть две библиотеки Lib1 и Lib2, в первой...

ViewModel и UserControl
Добрый день. Помогить немного разобрать, а то мне кажется, что я сам себя уже начинаю запутывать....

Прозрачность и UserControl
Доброго времени суток. Хотел реализовать простую задачу - выплывающие кнопки (сверху и снизу) в...


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

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