#25 C# WPF UI - Продвинутая синхронизация между элементами управления
00:07 Проблема с сохранением данных • В последнем видео создан элемент управления для ввода текста на странице настроек. • При наведении курсора можно нажать кнопку, ввести текст, нажать клавишу Esc для отмены действия или Enter для сохранения. • Проблема: данные не сохраняются при нажатии Enter, так как текстовое поле всё ещё находится в фокусе. 00:19 Исправление ошибки с фокусом • Текстовое поле по умолчанию привязано к тексту и обновляет модель представления при редактировании. • По умолчанию текстовые поля не обновляются, пока не потеряют фокус. • Решение: установить триггер обновления источника в привязке на изменение свойства. 01:15 Добавление двойного клика для редактирования • Добавление двойного клика для входа в режим редактирования текста. • Настройка привязок grid.input и действия мыши для двойного щелчка левой кнопкой мыши. • Команда для редактирования: «команда редактирования». 03:05 Привязка данных к элементам управления • Привязка свойств имени, логина, пароля и электронной почты к реальным данным. • Проблема: контекст данных переопределяет явные настройки. • Решение: создание модели разработки настроек и обновление ссылок в настройках. 08:01 Исправление отображения во время разработки • Во время разработки текстовое поле для редактирования не скрывается, что выглядит некорректно. • Решение: установить opacity по умолчанию равным нулю для редактируемого текста. 10:34 Выравнивание элементов по сетке • Проблема: элементы не выравниваются по одной сетке, создавая эффект смещения. • Решение: использование панели стека и зависимого свойства для изменения ширины элементов. • Создание зависимого свойства «длина сетки» для каждого элемента управления. 13:23 Реализация обратного вызова при изменении свойства • Добавление обратного вызова label width changed callback для обработки изменений ширины метки. • Получение нового и старого значений ширины метки в обратном вызове. • Изменение ширины столбца сетки на основе нового значения. 16:30 Обработка недопустимых данных • Использование блока try-catch для обработки недопустимых свойств. • При недопустимых данных ширина столбца устанавливается на Auto. • Добавление примечания для отладчика о потенциальных проблемах. 17:49 Преобразование строки в длину сетки • Попытка преобразования строки в допустимую длину сетки. • Использование преобразователя длины сетки для преобразования строки. • Проверка корректности преобразования. 20:39 Проблемы с приведением типов • Ошибка при попытке привести объект типа «длина сетки» к типу string. • Обнаружение, что WPF уже выполняет преобразование по умолчанию. • Решение оставить преобразование без изменений. 22:49 Управление шириной столбца • Возможность управления шириной столбца внутренней сетки извне. • Установка ширины метки для всех элементов управления. • Решение проблемы с обрезкой букв. 23:42 Привязка свойства зависимости • Создание свойства зависимости для изменения ширины элемента управления. • Обертывание элементов в панель стека. • Привязка свойства attach к панели. 25:13 Функция для установки ширины • Проблема с корректным отображением в режиме разработки. • Ожидание загрузки панели перед установкой ширины. • Вызов функции set widths для корректного отображения в режиме разработки. 27:12 Отслеживание изменений размера • Установка ширины всех дочерних элементов управления. • Отслеживание изменений размера текстовых полей. • Игнорирование всех элементов, кроме текстовых полей. 29:00 Обновление ширины при изменении размера • Присвоение уникальных имён элементам управления. • Обновление ширины при изменении размера метки. • Отслеживание максимального размера группы. 31:17 Игнорирование элементов, кроме текстовых полей • Игнорирование всех элементов, кроме текстовых полей ввода. • Повторный перебор дочерних элементов панели. 31:35 Установка максимального размера текстового поля • Максимальный размер текстового поля устанавливается равным наибольшему из двух значений: существующего максимального размера и размера дочернего элемента управления. • Размер отрисовки не включает отступы, поэтому необходимо добавить левое и правое поля. 32:28 Перебор элементов и установка ширины метки • Перебираем все элементы и находим элемент с наибольшим значением. • Для каждого дочернего элемента игнорируем границы текста и устанавливаем ширину метки равной максимальному размеру. 33:53 Конвертация длины сетки • Создаём новый конвертер длины сетки для преобразования максимального размера в длину сетки. • Используем `convert from string` для преобразования double в строку и обратно. 35:27 Проверка работы алгоритма • Проверяем выравнивание элементов при удалении и добавлении элементов. • Обнаруживаем, что среда разработки не запускает события при изменении значений, поэтому необходимо пересобрать проект. 36:17 Тестирование изменения размера 38:11 Отслеживание изменений текста 41:28 Решение проблемы с растяжением контроллера 43:06 Завершение и планы на будущее 44:01 Подготовка к следующему видео
00:07 Проблема с сохранением данных • В последнем видео создан элемент управления для ввода текста на странице настроек. • При наведении курсора можно нажать кнопку, ввести текст, нажать клавишу Esc для отмены действия или Enter для сохранения. • Проблема: данные не сохраняются при нажатии Enter, так как текстовое поле всё ещё находится в фокусе. 00:19 Исправление ошибки с фокусом • Текстовое поле по умолчанию привязано к тексту и обновляет модель представления при редактировании. • По умолчанию текстовые поля не обновляются, пока не потеряют фокус. • Решение: установить триггер обновления источника в привязке на изменение свойства. 01:15 Добавление двойного клика для редактирования • Добавление двойного клика для входа в режим редактирования текста. • Настройка привязок grid.input и действия мыши для двойного щелчка левой кнопкой мыши. • Команда для редактирования: «команда редактирования». 03:05 Привязка данных к элементам управления • Привязка свойств имени, логина, пароля и электронной почты к реальным данным. • Проблема: контекст данных переопределяет явные настройки. • Решение: создание модели разработки настроек и обновление ссылок в настройках. 08:01 Исправление отображения во время разработки • Во время разработки текстовое поле для редактирования не скрывается, что выглядит некорректно. • Решение: установить opacity по умолчанию равным нулю для редактируемого текста. 10:34 Выравнивание элементов по сетке • Проблема: элементы не выравниваются по одной сетке, создавая эффект смещения. • Решение: использование панели стека и зависимого свойства для изменения ширины элементов. • Создание зависимого свойства «длина сетки» для каждого элемента управления. 13:23 Реализация обратного вызова при изменении свойства • Добавление обратного вызова label width changed callback для обработки изменений ширины метки. • Получение нового и старого значений ширины метки в обратном вызове. • Изменение ширины столбца сетки на основе нового значения. 16:30 Обработка недопустимых данных • Использование блока try-catch для обработки недопустимых свойств. • При недопустимых данных ширина столбца устанавливается на Auto. • Добавление примечания для отладчика о потенциальных проблемах. 17:49 Преобразование строки в длину сетки • Попытка преобразования строки в допустимую длину сетки. • Использование преобразователя длины сетки для преобразования строки. • Проверка корректности преобразования. 20:39 Проблемы с приведением типов • Ошибка при попытке привести объект типа «длина сетки» к типу string. • Обнаружение, что WPF уже выполняет преобразование по умолчанию. • Решение оставить преобразование без изменений. 22:49 Управление шириной столбца • Возможность управления шириной столбца внутренней сетки извне. • Установка ширины метки для всех элементов управления. • Решение проблемы с обрезкой букв. 23:42 Привязка свойства зависимости • Создание свойства зависимости для изменения ширины элемента управления. • Обертывание элементов в панель стека. • Привязка свойства attach к панели. 25:13 Функция для установки ширины • Проблема с корректным отображением в режиме разработки. • Ожидание загрузки панели перед установкой ширины. • Вызов функции set widths для корректного отображения в режиме разработки. 27:12 Отслеживание изменений размера • Установка ширины всех дочерних элементов управления. • Отслеживание изменений размера текстовых полей. • Игнорирование всех элементов, кроме текстовых полей. 29:00 Обновление ширины при изменении размера • Присвоение уникальных имён элементам управления. • Обновление ширины при изменении размера метки. • Отслеживание максимального размера группы. 31:17 Игнорирование элементов, кроме текстовых полей • Игнорирование всех элементов, кроме текстовых полей ввода. • Повторный перебор дочерних элементов панели. 31:35 Установка максимального размера текстового поля • Максимальный размер текстового поля устанавливается равным наибольшему из двух значений: существующего максимального размера и размера дочернего элемента управления. • Размер отрисовки не включает отступы, поэтому необходимо добавить левое и правое поля. 32:28 Перебор элементов и установка ширины метки • Перебираем все элементы и находим элемент с наибольшим значением. • Для каждого дочернего элемента игнорируем границы текста и устанавливаем ширину метки равной максимальному размеру. 33:53 Конвертация длины сетки • Создаём новый конвертер длины сетки для преобразования максимального размера в длину сетки. • Используем `convert from string` для преобразования double в строку и обратно. 35:27 Проверка работы алгоритма • Проверяем выравнивание элементов при удалении и добавлении элементов. • Обнаруживаем, что среда разработки не запускает события при изменении значений, поэтому необходимо пересобрать проект. 36:17 Тестирование изменения размера 38:11 Отслеживание изменений текста 41:28 Решение проблемы с растяжением контроллера 43:06 Завершение и планы на будущее 44:01 Подготовка к следующему видео




