Да, необходимо перенестись в кавычках:
"some value
over two lines",some other value
От этот документ , который является общепринятым стандартом CSV:
поле А, которое содержит встроенные разрывы строки, должно быть окружено двойными кавычками
Извините, это так долго ... надеюсь, это поможет! Одна вещь, которую я хотел бы упомянуть, это то, что это концепции / вещи, которые сбили меня с толку, я не уверен, что буду использовать это как подробный список того, что изучать, если вы только начинаете. Я бы погрузился в некоторые книги , прочитал множество блогов ( Джош Смит , Dr. WPF ), и в общем, погрузился и попробовал в маленьких проектах.
Основные концепции
Логические и визуальные деревья (ссылки: 1 )
Понимание различных деревьев в WPF. В частности, понимание логического дерева по сравнению с визуальным деревом и того, как элементы в логическом дереве расширяются в визуальное дерево посредством шаблонов данных, шаблонов элементов управления и т. Д.
Система свойств зависимостей (ссылки: 1 , 2 )
Понимание всей системы свойств зависимостей в WPF намного шире, чем кажется на первый взгляд. Конечно, легко создать свойство быстрой зависимости, а затем использовать его для расширения возможностей других концепций WPF, таких как привязка данных и анимация, но затем все начинается.
Есть обычные свойства зависимостей, а затем есть присоединенные свойства зависимостей. Существует множество различных способов зарегистрировать их все и множество различных параметров метаданных, которые вы можете установить.
Понимание того, почему это называется свойством зависимости, в этом отношении, заняло у меня некоторое время. То есть понимание того, что значение свойства поступает из множества различных источников (свойство зависит от этих поставщиков значений) и что существует порядок приоритета / алгоритм того, как устанавливается окончательное значение свойства в любой момент времени.
Маршрутизировано. События (ссылки: 1 , 2 )
Понимание того, как они могут быть восходящими, маршрутизирующими или прямыми. Понимание того, что вы также можете присоединять перенаправленные события (в отличие от простого присоединения обработчика событий к событию, которое направило визуальное дерево).
Советы
Глава 3 в WPF Unleashed Адама Натана является Замечательная глава, в которой рассматриваются эти важные новые концепции, и вам следует прочитать, поработать над проектом, а затем прочитать еще раз.
Dr. Фрагменты WPF - отличный способ узнать о свойствах зависимостей, перенаправленных событиях и командах.
Графические концепции (ссылки: 1 )
Независимость от разрешения (ссылки : 1 , 2 )
WPF обладает всеми преимуществами независимости восстановления (вы указываете все с помощью независимых от устройства пикселей), но это также вызывает некоторые головные боли, которые необходимо решить. В частности, позволяет добиться четкости изображения, когда вы этого хотите, за счет использования пиксельной привязки, установки рекомендаций и т. Д.
Сохраненный режим против немедленного режима
WPF имеет подсистему рисования в сохраненном режиме, что означает, что он отслеживает инструкции по рисованию и кэширует их для дальнейшего использования. Это может быть проблемой производительности, если вы пытаетесь создать что-то, в котором много визуальных элементов, которые обновляются одновременно.
Элементы управления, элементы, визуальные эффекты (ссылки: 1 )
Понимание того, что каждая вещь в иерархии WPF делает за вас и понимает, какой вес она приносит в производительности. В частности, используете ли вы элемент управления, который можно изменить, изменить стиль и многое другое ... или вам нужно что-то сверхлегкое (например, программирование на визуальном уровне), чтобы вы могли его жестко и быстро управлять.
Советы
У Криса Селлса и Иана Гриффитса есть отличное приложение в конце своей книги Программирование WPF , в котором рассказывается о различных типах в WPF API, где они вписываются в иерархию и какую ценность они приносят.
Шаблоны WPF
Шаблон Model-View-ViewModel (MVVM) (ссылки: 1 )
Шаблон MVVM уже упоминался как помогающий начать делать вещи способом WPF. Я не могу с этим согласиться. Вместо того, чтобы заполнять элементы управления данными, вы начинаете преобразовывать данные в визуальные элементы (с помощью шаблонов данных).
Шаблон поведения прикрепленного свойства (ссылки: 1 , 2 , 3 )
WPF расширяем, как никакой другой API. Используя прикрепленные свойства, вы можете очень элегантно создать дополнительное поведение и там, где, как вы думали, вы могли застрять.
WPF! = Windows Forms
Я знаю, что кто-то уже упоминал об этом, но я хочу полностью согласиться. Существует так много новых и разных концепций, что вам действительно нужно отучиться от многих вещей и подойти к решению проблем с совершенно другой точки зрения. Например, Windows Forms - это подсистема рисования в немедленном режиме, в то время как WPF - в сохраненном режиме (см. Выше).
Множество способов делать что-то в WPF
Это забавная вещь, чтобы вспомнить, но потому что в WPF есть так много способов сделать что-то, это почти парализует. Как правильно поступать? Это что? Это оно? Мне пришлось преодолеть страх поступить неправильно, просто вскочить и учиться на своих ошибках.
WPF не является WinForms. Большинство, если не все, распространенные стратегии, которые вы используете для выполнения задач в WinForms, являются неправильным (или наименее эффективным) способом в WPF. Команды, свойства зависимостей, привязка, создание шаблонов и т. Д. - все будет менее полезным, если вы примете мышление WinForms.
В настоящее время мы разрабатываем большое приложение для визуализации. Как опытные программисты WinForms, в нашей первой демонстрации многомерных данных были предварительно вычислены тысячи визуальных элементов. Ползунок будет перемещаться по размерам визуальных элементов с помощью обратного вызова. Никакие данные не будут загружены после первоначальной настройки. Это имело очень низкую производительность.
Переключение на тысячи привязок с преобразователями данных только для нескольких сотен визуальных элементов с загрузкой и пересчетом данных на лету. Это привело к увеличению производительности на порядок. Было почти невероятно, что тысячи привязок будут быстрее, чем тысячи предварительно вычисленных визуальных элементов, но так обстоит дело в WPF.
« От WinForm к WPF: Краткое справочное руководство » может быть полезным.
Свойства зависимостей заняли некоторое время. Вот хорошая статья , и еще одна , которая помогла мне с этой новой концепцией.
Вторая статья содержала следующий абзац, который действительно прояснил несколько моих вопросов.
A ключевое значение зависимости Система свойств заключалась в возможности строить свойства, которые автоматически уведомить любую зарегистрированную заинтересованную сторону каждый раз стоимость собственности изменения. Это бесплатно, безболезненно и автоматическая реализация модель наблюдателя чрезвычайно мощный и значительно снижает нагрузка на клиентского программиста (в Фактически, система привязки данных зависит на нем!)
В целом, я также обнаружил, что предыдущий опыт веб-разработки (в частности, пользовательского интерфейса браузера) очень полезен для "получения" WPF. Это больше связано с мышлением, которое он позволяет вам привнести в WPF, по сравнению с тем, кто когда-либо работал только с Windows Forms или другими многофункциональными клиентскими приложениями.
Еще несколько очевидных параллелей из веб-мира - это CSS, плавные макеты, анимация jQuery , всплытие / маршрутизация событий и просто удобство работы с обширным браузером и объектными моделями DHTML.
Шаблоны данных (и шаблоны управления в этом отношении).
На первый взгляд, это довольно просто, но как только вы начнете пытаться настроить привязку между различными файлами XAML, это может
Я полагаю, что мне, наконец, удалось разобраться в этом, просмотрев множество документов MSDN, но, более того, методом проб и ошибок. Обычно лучший способ изучить любую технологию - это поиграть с вещами.
Я все еще не могу указать целевое свойство в анимации без шпаргалки:
<DoubleAnimation
Storyboard.TargetProperty=
"(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
To="1.2" Duration="0:0:.2" />
Давайте рассмотрим это с точки зрения новичков. Я использую простой редактор, например KaXML или Sharpdevelop для разработки WPF. и я обнаружил, что не могу продолжить разработку базы данных без компонента сетки базы данных. Так что это не похоже на формы Windows . Начните поиск компонента сетки коммерческой базы данных. и в защиту люди скажут, что это не самое сложное или ограничение.
Для разработки серьезных приложений необходимо работать с файлами C # или другими языковыми файлами, поддерживаемыми .NET Framework. Если это не делает его проблематичным, зачем мне его использовать в первую очередь. Я доволен C #, почему мне нужно использовать WPF?
Самые сложные вещи на данный момент:
Одно дело читать книги и разбираться в материалах, а другое - применять их в своем проекте. Я создавал относительно простой элемент управления списком контактов, как и в Outlook, и натолкнулся на множество небольших, но заметных кривых обучения.
DataTrigger
(кто бы мог подумать). ItemsPanel
для окна списка внезапно стало проблемой, так как не было упорядочивания элементов (с этим нужно играть). RelativeSource
в привязке. В принципе, возможность привязать элементы управления в вашем шаблоне (от родительского к дочернему и наоборот) - это хороший способ обучения.
Мой совет. Напишите небольшое приложение, и вы увидите, как все складывается.
Различия в синтаксисе привязки заключались в одном; т.е. когда использовать Binding, а когда - StaticResource / DynamicResource. Когда я впервые изучал WPF, я все время путал их.
Поначалу было трудно понять различные формы DP и присоединенных свойств.
Я бы сказал, что самыми сложными моментами, когда я начал изучать WPF, были:
RelativeSource
, преобразователи ... DataTrigger
s, Trigger
s или EventTrigger
s ... Есть много мелких вещей, которые поначалу могут показаться трудными, если у вас есть опыт работы с Windows Forms. Вам нужно отучиться многому, и переключиться на совершенно иную ментальную модель структуры пользовательского интерфейса.
Сначала я начал писать код, как в Windows Forms, с большим количеством кода программной части, но это определенно был неправильный путь. Шаблон MVVM действительно помог мне проникнуть в «философию» WPF ...
Моим основным источником документации для изучения WPF был, конечно, MSDN, где вы можете найти большинство ответов, если знаете, как смотреть. Я также многому научился в следующих блогах:
Макет отличается в WPF см. http://blogs.msdn.com/b/wpfsldesigner /archive/2010/06/03/layout-techniques-for-windows-forms-developers.aspx, чтобы узнать, как использовать редактор макета