Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
Я новичек, не стукайте
7 / 7 / 3
Регистрация: 05.05.2022
Сообщений: 274
.NET 8

Привязка данных календаря в usercontrol

28.12.2023, 12:06. Показов 5115. Ответов 61
Метки wpf (Все метки)

Студворк — интернет-сервис помощи студентам
Сделал свой usercontrol в котором есть календарь
XML
1
2
3
4
5
6
7
8
<Grid VerticalAlignment="Top" HorizontalAlignment="Left" Height="302" Width="276">
    <Border Background="White" CornerRadius="12" VerticalAlignment="Center" IsHitTestVisible="False" HorizontalAlignment="Center" Width="270" Height="296" BorderThickness="0">
        <Border.Effect>
            <DropShadowEffect BlurRadius="24" Color="#71A6BE" Opacity="0.25"/>
        </Border.Effect>
    </Border>
    <Calendar IsHitTestVisible="True" VerticalAlignment="Center" HorizontalAlignment="Center" x:Name="MyCalendar" DisplayDateChanged="Calendar_DisplayDateChanged" Style="{DynamicResource CalendarStyle1}" CalendarButtonStyle="{DynamicResource CalendarCalendarButtonStyle1}" CalendarDayButtonStyle="{DynamicResource CalendarCalendarDayButtonStyle1}" CalendarItemStyle="{DynamicResource CalendarCalendarItemStyle1}"/>
</Grid>
Как сделать так, что бы при выборе даты, дата записывалась в тестбокс?
Ниже основной код в котором надо сделать привязку
XML
1
2
3
4
    <Grid>
        <local:UserControlCalendar x:Name="MyCalendar" ></local:UserControlCalendar>
        <TextBox x:Name="myTextBox" VerticalAlignment="Top" HorizontalAlignment="Right" Height="50" Width="100" Background="Aqua" />
    </Grid>
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.12.2023, 12:06
Ответы с готовыми решениями:

UserControl и привязка данных
Всем привет нужна помощь уже второй день мучаюсь с этой проблемой. Не понимаю какая проблема есть у UserControl что он ни в какую не хочет...

Привязка DP-свойства UserControl к вложенному элементу
Хотел реализовать одну задачу. Для реализации потребовалось создать привязку DP-свойства UserControl ко вложенному элементу. До этого...

Привязка календаря к полю даты в Access
Для того, чтобы привязать календарь access к полю данных есть свойство &quot;данные&quot; (&quot;ControlSource&quot;). В оболочке там находится...

61
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
07.02.2024, 19:27
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Budka3000 Посмотреть сообщение
Столкнулся немного с другой проблемой, но из той же серии
так как используете User Control, то у него нет свойства SelectedDate вам нужно его написать самим как в примере выше. Или же использовать Custom Control.

Добавлено через 3 минуты
А в целом чтобы отображать данные в текстовом поле то доп переменные писать не нужно. Хватит
XML
1
Text="{Binding SelectedDate, elementname=Calendar, StringFormat=D}"
Выведет дату D: "6 января 2022 г."
Доступные форматы
Форматирование дат и времени
0
Я новичек, не стукайте
7 / 7 / 3
Регистрация: 05.05.2022
Сообщений: 274
09.02.2024, 11:30  [ТС]
Цитата Сообщение от xellan24rus Посмотреть сообщение
стиль не работает
Сами стили прописаны в непосредственно в usercontrol, извне их не использовать, отдельно стиль не выносил в ресурсы
+ еще есть отдельные классы для кастомизации некоторых элементов (Дни недели, YearConverter и MonthConverter вроде уже и не используются) и code behind прописанный для combobox и их связную работу с самим календарем
Без полного кода ошибки не понять в чем проблема именно, но в рамках usercontrol все хорошо
Про ошибки привязки у кнопок это нормально, сами по себе кнопки рабочие. Пока что пытаюсь от них избавиться, но не особо успешно
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
09.02.2024, 12:04
Budka3000, я пишу ответ с заметками что исправил, касательно важных моментов только.
Цитата Сообщение от Budka3000 Посмотреть сообщение
Сами стили прописаны в непосредственно в usercontrol
Но лучше было бы разбить их по файлам и использовать в главном шаблоне. Сейчас всё, абсолютно всё в 1 файле... Будь у вас пару десятков стилей, это стало бы проблемой чтения и правок.
0
Я новичек, не стукайте
7 / 7 / 3
Регистрация: 05.05.2022
Сообщений: 274
09.02.2024, 12:09  [ТС]
Цитата Сообщение от xellan24rus Посмотреть сообщение
Будь у вас пару десятков стилей, это стало бы проблемой чтения и правок.
Для календаря точно столько не будет
А так, обычно этим занимаю уже в последний момент, ибо редактировать стили в usercontrol из другого файла оочень не удобно, прыгать с одного файла в другой что бы на превьюшке понять где что изменилось, сомнительное удовольствие
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
09.02.2024, 12:38
Цитата Сообщение от Budka3000 Посмотреть сообщение
прыгать с одного файла в другой что бы на превьюшке понять где что изменилось, сомнительное удовольствие
Это становится удобным когда появляется понимание визуального дерева в коде, как оно выглядит в представление.
Это приходит с практикой.

Цитата Сообщение от Budka3000 Посмотреть сообщение
А так, обычно этим занимаю уже в последний момент,
Но так делать тоже верно, так как вам быстрее сделать видя изменения сразу. Но тем не менее даже на уровне одного стиля не нужно писать в теле стиля, новые стили. Это усложнят чтение кода.
0
Я новичек, не стукайте
7 / 7 / 3
Регистрация: 05.05.2022
Сообщений: 274
09.02.2024, 12:44  [ТС]
Цитата Сообщение от xellan24rus Посмотреть сообщение
Это усложнят чтение кода.
Если относительно больших стилей по типу того же календаря или комбобокса то тут определенно соглашусь, но если например куча стилей/шаблонов кнопки, то можно все и в один файл, а в нем уже по названию искать
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
09.02.2024, 12:53
Budka3000, я и имел ввиду про разбиение стилей в рамках одного файла. Например у вас в календаре есть первая кнопка, затем два combobox и 4я кнопка, если их стили вынести в другое место, а не писать код их в самом стиле. То понять легче что у вас есть 4 элемента и их компоновку сразу видно. А правки нужны, то по переходу на стиль той же кнопки, они доступны всегда
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
09.02.2024, 15:47
Budka3000, переписал пример на Custom Control.
Вы делаете так
XML
1
<Button Visibility="Collapsed" x:Name="PART_HeaderButton"
В вашем стиле эта часть не нужна, не нужна, так как вы размещаете там свои comboBox. Поэтому подобный код просто удаляем.

Но как выяснилось без неё ComboBox не работают, выдается исключение throw new ArgumentNullException("element");
так как PART_HeaderButton удален.. Для этого удалим не нужный код в PART_HeaderButton
и оставим только это
XML
1
<Button Visibility="Collapsed" x:Name="PART_HeaderButton" Focusable="False"/>

Вы в ресурсах объявляете стили, Tempelate. Так лучше не делать, вы засоряете так код, его сложно понимать. Лучше вынести в отдельный стиль или ControlTemplate. Другая проблема анимаций в стиле который в ресурсах, оно становятся замороженными, и биндинг в них работает не очень хорошо.

Проблему по которой скопированный шаблон не работает в mainWindow не нашёл, поэтому на основе оригинального шаблона msdn, переписал ваш.
Добавил пару свойств:
SelectedMonth
SelectedYear
Показал в примере как к ним можно обратиться во view для отображения значения.
StylesWPF.rar
1
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
09.02.2024, 16:16
Будут вопросы не стесняйтесь задавать)

Добавлено через 26 минут
Цитата Сообщение от Budka3000 Посмотреть сообщение
Привязка данных календаря в usercontrol
В целом лучше делать Custom Control для контролов, так как не нужно изобретать свои привязки. Если для календаря достаточно одну сделать, для выбранной даты. То к примеру для DataGrid реализовать-проксировать все свойства и возможности её, это долгий процесс, долгий процесс лишней работы. Лучше унаследовать контрол и изменить стиль под свои нужды и изменить логику под свои нужды.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
09.02.2024, 20:24
Budka3000, исправил код, теперь при кликах кнопок или дней следующего месяца, данные обновляются.
StylesWPF-Calendar.rar
0
Я новичек, не стукайте
7 / 7 / 3
Регистрация: 05.05.2022
Сообщений: 274
12.02.2024, 15:09  [ТС]
Цитата Сообщение от xellan24rus Посмотреть сообщение
Будут вопросы не стесняйтесь задавать)
Они обязательно будут, и возможно куча глупых (так как для меня Custom Control пока что темнейший лес), завтра гляну
Цитата Сообщение от xellan24rus Посмотреть сообщение
Вы делаете так
Я просто не знал как их правильно удалить, на моей память при попытке удалить было куча ошибок и как их убирать я хз
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
12.02.2024, 15:48
Цитата Сообщение от Budka3000 Посмотреть сообщение
Я просто не знал как их правильно удалить, на моей память при попытке удалить было куча ошибок и как их убирать я хз
Если вы читали ответ полностью, то я написал что ошибки появляются если удалить, и про то что просто удаляем весь код, оставляем ничего кроме объявления.
Цитата Сообщение от Budka3000 Посмотреть сообщение
Они обязательно будут, и возможно куча глупых (так как для меня Custom Control пока что темнейший лес), завтра гляну
Хорошо, но парочку как сделаете сами, будет понимание уже как они работают)
0
Я новичек, не стукайте
7 / 7 / 3
Регистрация: 05.05.2022
Сообщений: 274
14.02.2024, 14:33  [ТС]
Цитата Сообщение от xellan24rus Посмотреть сообщение
будет понимание уже как они работают)
А есть какой-то гайд на русском с простыми примерами?
И есть ли какие-то подводные камни связанные с пространством имен?
В этом тестовом проекте все ResourceDictionary (в том числе и для календаря) прописал в App.xaml и удалил из других мест, и все так же работает
При попытке перенести в другой проект, прописываю необходимые ResourceDictionary для стилей дальше 2 варианта событий
1) Создаю отельную папку в проекте, куда добавляю CustomCalendar. В xaml файле меняю пространство имен, но вижак новую директорию не предлагает, но ранее созданные предлагает(полагаю баг вижака). В cs файле меняю путь local для директории с классом и там все хорошо. Прописываю local2 с путем до календаря, само пространство имен не ругается, но в коде вообще ни в какую не хочет видеть пространство имен.
Пример кода ниже:
XML
1
2
ItemsSource="{Binding Years, RelativeSource={RelativeSource AncestorType=local2:CustomCalendar}}"
SelectedItem="{Binding SelectedYear, RelativeSource={RelativeSource AncestorType=local2:CustomCalendar}}"
Конструктор в usercontrol видит CustomCalendar, но из-за ошибок нет возможности его разместить
2) Если разместить CustomCalendar в папке с классами, то проблемы с local в календаре не будет. Но при попытке разместить календарь, его будто вообще не существует в объявленном пространстве имен
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
14.02.2024, 18:36
Budka3000, у меня не было подобных проблем как у вас. Давайте вместе разберемся что у вас не получается. Так как вы решили разобраться как работает Custom Control, тогда удалите свой User Control. Для Custom Control в App.xaml ничего прописывать не нужно, то есть исходник что я прикрепил, если удалить всё в App.xaml, custom control будет работать, но user control перестанет работать.
Примеров на русском нет нормальных чтобы можно было понять с первого раза или я таких не встречал. Нос этим можно разобраться.
После переноса в другой проект Custom control не работает, потому что вы указали не правильно пути, можете выложить проект, разберемся что не так. Но если вы хотите использовать Custom control в разных проект, лучше создать библиотеку. Менять пути каждый раз в новом проекте, это ужасно. И к тому же если вы захотите переопределить стиль, то это всегда можно будет сделать в проекте с учетом того что шаблон будет в библиотеке. Это не проблема.

Для начала давайте разберемся что у вас сломалось, выложите проект. Затем реализуем библиотеку.
0
Я новичек, не стукайте
7 / 7 / 3
Регистрация: 05.05.2022
Сообщений: 274
19.02.2024, 13:15  [ТС]
Цитата Сообщение от xellan24rus Посмотреть сообщение
Для начала давайте разберемся что у вас сломалось, выложите проект. Затем реализуем библиотеку.
Основной проект не могу выложить(
Пока что ковыряю этот проект, и у меня появился вопрос
В app.xaml дублируется объявление ресурсов
XML
1
2
3
4
5
                <ResourceDictionary Source="\Fonts\Fonts.xaml"/>
                <ResourceDictionary Source="\Colors.xaml"/>
 
                <ResourceDictionary Source="/StylesWPF;component/Colors.xaml"/>
                <ResourceDictionary Source="/StylesWPF;component/Fonts/Fonts.xaml"/>
Способы разные, как я понял, в перовом случае работы в рамках одного проекта, а второй в случае когда ресурс может находится в другой сборке
Такое решение было намеренным или ошибочным?
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
19.02.2024, 19:32
Цитата Сообщение от Budka3000 Посмотреть сообщение
В app.xaml дублируется объявление ресурсов
Цитата Сообщение от Budka3000 Посмотреть сообщение
Такое решение было намеренным или ошибочным?
Я разделил стили т.п по файлам, чтобы UserControl не сломался я объявил в app всё.
Если удалить всё из app, то CustomControl будет работать так как другие словари заданы в нем.
1
Я новичек, не стукайте
7 / 7 / 3
Регистрация: 05.05.2022
Сообщений: 274
20.02.2024, 11:28  [ТС]
Цитата Сообщение от xellan24rus Посмотреть сообщение
выложите проект. Затем реализуем библиотеку.
У меня есть предположение в чем мой косяк был, но хочу его чуть позже проверить
Я немного переделал тот вариант проекта и убрал лишнее + расположение файлов сделал как в проекте в который собираюсь перенести
Хотел бы узнать можно ли как-то класс CalendarDayNameConverter перенести в CustomCalendar? Сам попробовал, но безуспешно
Вложения
Тип файла: rar StylesWPF-Calendar.rar (1.67 Мб, 3 просмотров)
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
20.02.2024, 14:14
Budka3000, Удалил всё с app, перенес конвертер куда вы просили.
Цитата Сообщение от Budka3000 Посмотреть сообщение
Хотел бы узнать можно ли как-то класс CalendarDayNameConverter перенести в CustomCalendar?
Смотрите
XML
1
xmlns:local="clr-namespace:StylesWPF"
Сравнить можно с using в c#
То есть вы задаете xmlns:Name="clr-namespace:Path"
Там где Name это любое имя которое захотите для ссылки, а Path это путь к директории ваших классов.
Пример, ссылка на вашу директорию с шрифтами.
XML
1
xmlns:Assets="clr-namespace:StylesWPF.Assets.Fonts"
Как работает Custom Control вы уже поняли, создается cs файл наследуемый от элемента который хотим изменить или создать, создает файл xaml и из важного у нас есть Themes/Generic.xaml он и задет стили по умолчанию для Custom Control
XML
1
<ResourceDictionary Source="/StylesWPF;component/CustomCalendar.xaml"/>
Инициализация словаря ресурсов со стиля.
И в файле нашего стиля
XML
1
 <Style TargetType="{x:Type local:CustomCalendar}">
То есть задаем стиль для элемента CustomCalendar, если указать x:Key, то работать перестанет стиль. Но тут уже о работе со стилями база идёт.

Теперь когда ваш проект готов и не содержит лишнего, можете перенести всё в Библиотеку классов Wpf, CustomCalendar в оснвном проекте вы сможете вызвать по ссылке, правок кода никакий не нужно чтобы перенести решение в либу
StylesWPF-Calendar.rar
0
Я новичек, не стукайте
7 / 7 / 3
Регистрация: 05.05.2022
Сообщений: 274
21.02.2024, 11:37  [ТС]
Моя очередная попытка напрямую перенести файлы с изменением ресурсов не увенчалась успехом
Цитата Сообщение от xellan24rus Посмотреть сообщение
можете перенести всё в Библиотеку классов Wpf
Как это можно сделать и использовать?
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
21.02.2024, 11:42
Как это можно сделать и использовать?
Создать проект, "библиотека классов wpf" скопировать весь код Custom Control.
Если ничего работать не будет, то нужно изменить все ссылки на пространства имен, во всех xaml.
Я описывал выше как это сделать.

Моя очередная попытка напрямую перенести файлы с изменением ресурсов не увенчалась успехом
Не совсем понял
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.02.2024, 11:42

Перенос данных из UserControl в UserControl
Всем привет ! :) Суть проблемы следующая: • Есть 2 UserControl “V” и “MN” • В “V” есть textBox “Vso2” с названием...

Парсинг данных с календаря
Всем доброго времени суток! Обращаюсь к Вам с таким вопросом. Совсем недавно начал по туториалам учить и разбираться в парсинге, но...

Сериализация данных календаря
Добрый день! Пишу элементарный органайзер на WPF .Хочу сделать так, чтобы при нажатии на любую дату в Календаре, справа появлялся...

Получение данных из календаря Outlook
Всем привет. Народ, подскажите пжлста, встала задача по выдёргиванию данных из календаря в Outlook. Кто нибудь сталкивался может,...

Как на странице с UserControl поймать что нажато в самом UserControl
Есть страница (MyPage.aspx). На ней UserControl (menu.asax). А в нем кнопки (btn1, btn2...). Одну из них я нажимаю. Теперь MyPage...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru