Luar Soll, блог «Программизмы»
О кастомизации элементов управления:
User Control - объединить несколько контролов в один (если, например, какая-то комбинация их встречается часто)
Custom Control - собственно кастомные элементы, могут быть унаследованы от Control (или еще более общих вещей) и отрисованы с нуля, могут быть унаследованы от чего-то более конкретного и менять его работу
Control Template - когда надо радикально поменять вид, но сохранить функциональность
Для анимации изменения какого-нибудь параметра Control-а (например, высоты) можно использовать Storyboard. Style и Template можно менять в зависимости от действий пользователя (или отображаемых данных)
О browser-like навигации
Работая с навигацией между страницами (в веб-приложении или в Standalone) можно сделать на странице Frame, в котором тоже будет навигация между страницами, и в истории навигации будет запоминаться и то, как менялся Frame тоже (можно объединить это в в одной паре стрелочек Back и Forward, можно в Frame встроить свою)
Luar Soll, блог «Программизмы»
- В XAML написано, к какому классу относится этот XAML. При сборке приложения берется XAML, по нему определяется, какой нужен класс, и лишь затем создается объект класса
- От запуска приложения до начала его работы может пройти какое-то время, пока приложение инициализируется. В это время можно показать картинку SplashScreen
- Первое созданное в приложении окно по умолчанию считается главным
- Если на старте приложения (функция Startup) надо только открыть окно (или страницу в браузерном приложении), то можно не писать функцию Startup (может называться по-другому) в коде, а указать это окно или страницу в XAML приложения
- В функции Startup (может называться по-другому) происходит обработка аргументов командной строки
- В XAML можно указать сопоставление событий и функций обработки событий (например, указать функции обработки активации/деактивации окна)
- Можно поймать в дверях Unhandled Exception с помощью обработчика DispatcherUnhandledException и как минимум более корректно завершить работу приложения и сказать пользователю об ошибке. А как максимум сделать, чтобы приложение продолжило работу
Luar Soll, блог «Программизмы»
- Мы можем привязываться не только полностью к Collection View, но также и к "текущему" элементу коллекции и к определенному полю внутри коллекции. Возможны вложенные коллекции и привязка к их View. "Текущий элемент" - например, последний выделенный
- DataTemplate - как именно отображать элемент Collection View в UI. Позволяет не только выбрать информацию к отображению, но и "сделать красиво" (причем по-разному в зависимости от параметров отображаемого элемента коллекции). То, что не зависит от параметров отображаемого элемента, лучше настраивать через настройки UI в целом
- Возможно выбирать конкретный Template в зависимости от параметров элемента Collection View (и отображать элементы _совсем_ по-разному), но это уже делается в коде
- ValidationRule - проверка того, что введенные в элемент UI данные можно конвертировать в привязанную к этому элементу переменную. Есть стандартные, можно создавать свои. Как именно выглядит уведомление об ошибке - тоже можно задавать
- Валидация может быть как до конвертации строки в значение (например, что в строке число), так и после (например, что это число в указанных пределах). Также может быть какая-то валидация после присвоения значения привязанной переменной
- По умолчанию ListBox, привязанный к коллекции, берет от элемента .ToString, и иногда достаточно переопределить ToString
- Реально дофига всего можно сделать с Data Binding именно через XAML, не залезая в код. Например, привязаться к Enum. Или задать конкретные параметры для функции валидации
Если создается пользовательский класс, объект которого к чему-то привязывается, то:
- Если будет передача данных от объекта, то нужны уведомления об изменениях
- Свойства объекта, используемые при привязке, должны быть public
- Невозможно привязаться к полям
MSDN можно переключить на американскую версию. Но для этого нужно прокрутить до самого низа страницы. Там слева будет переключатель.
Luar Soll, блог «Программизмы»
- Если вы пытаетесь создать объект не существующего класса, то VS2015 предложит вам создать этот класс и даже покажет превью
- По буквосочетанию In подсказка VS2015 выдаст не только Input, но и LoadInput. Но не Window, потому что ориентируется на то, что значимые слова в имени переменной/функции начинаются с больших букв. Иногда можно набрать только большие буквы и получить функцию целиком (OSI -> OpenStandardInput)
- Ctrl делает подсказку от IntelliSense прозрачной
- В WPF возможен Binding коллекций. Для этого нужен CollectionView. Сначала в ресурсах нужно привязать CollectionViewSource к коллекции (и дать ему имя), потом параметр ItemsSource элемента интерфейса (например, ListBox) к CollectionViewSource (с конкретным именем). Еще у коллекций есть View по умолчанию, можно привязываться просто к нему. Если мы сортируем/фильтруем ListBox, то это влияет на привязанный View, но не на саму коллекцию
Luar Soll, блог «Программизмы»
Продолжаем:
- Если нужно посмотреть на текст вызываемой функции, можно не переходить к файлу, а посмотреть его во "врезке" (мысль интересная, но я постоянно !нечаянно! попадаю по этому варианту, а не по стандартному переходу к файлу, и это меня бесит)
- Можно вместо скроллбара сделать своеобразный "силуэт файла" - с моим "я не помню, какая это была страница, но форма текста там была вот такая!" это может быть полезно... но с моей длиной файлов с кодом - скорее вредно))
- Поиск через Navigate To работает с учетом релевантности. Может быть полезно. Но может быть пц нелогично
- Есть окно, где можно в режиме "написал - выполнил" выполнять отдельные кусочки команд - усложненная версия возможности посмотреть значение конкретного выражения на брекпойнте. Может быть полезно при дебаге (гуглить по словам Immediate Window)
- Часть сообщений об ошибках вылезает на этапе редактирования, а не только при компиляции
Luar Soll, блог «Программизмы»
Вообще в основном я работаю в Qt Creator и пишу на C++. Но бывает, что мне нужно (для определенной задачи или для определенного проекта) мигрировать под Visual Studio, а то и вообще на C#. Вот сейчас как раз такой случай.
Причем если на плюсах под Visual Studio я некоторое время назад уже писала (но студия была 2010 и 2013), то на шарпе я писала дааавноооо. А тут еще ощущение, что пользовательский интерфейс VS2015 очень сильно отличается от пользовательского интерфейса VS2013.
С методом ненаучного тыка у меня в последние дни плохо, поэтому, не сумев сразу сделать то, что было надо и обнаружив несколько вроде бы и в общих чертах понятных, но все равно каких-то для меня загадочных фич, я нагло спиратила добыла на просторах интернета книжку по VS2015 и потихоньку ее читаю заодно пополняю свой англоязычный словарный запас*. При этом иногда нахожу такое, что бы вряд ли нашла просто тыкая кнопочки. И что наверняка забуду, если не законспектировать.
В общем, пока читаю про пользоавтельский интерфейс VS2015, из интересного уже почерпнула следующее:
- Просто горячих клавиш и сочетаний клавиш с Ctrl и прочим Alt там уже жестоко не хватает, поэтому, скажем, для того, чтобы закомментить блок кода нужно нажать сначала Ctrl+K, потом Ctrl+C
- Если код выровненный и в нескольких строчках подряд должен быть одинаковый кусок текста в одном месте (например, сразу несколько переменных нам надо срочно превратить из float в double), то можно "выделить вертикальный блок кода" и сразу удалить его содержимое или вбить один и тот же текст в нескольких строчках
*мой англоязычный словарный запас - это отдельное нечто, потому что он складывается в основном из форумов по программированию и фэнтези в различных проявлениях (книги, рулбуки, комп.игры).
Лучшее
Материалы сайта предназначены для лиц старше 16 лет (16+)