Что Вы находили самым твердым понять при изучении [закрытого] WPF

Да, необходимо перенестись в кавычках:

"some value
over two lines",some other value

От этот документ , который является общепринятым стандартом CSV:

поле А, которое содержит встроенные разрывы строки, должно быть окружено двойными кавычками

62
задан 4 revs, 2 users 94% 19 September 2009 в 17:47
поделиться

10 ответов

Извините, это так долго ... надеюсь, это поможет! Одна вещь, которую я хотел бы упомянуть, это то, что это концепции / вещи, которые сбили меня с толку, я не уверен, что буду использовать это как подробный список того, что изучать, если вы только начинаете. Я бы погрузился в некоторые книги , прочитал множество блогов ( Джош Смит , 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 есть так много способов сделать что-то, это почти парализует. Как правильно поступать? Это что? Это оно? Мне пришлось преодолеть страх поступить неправильно, просто вскочить и учиться на своих ошибках.

94
ответ дан 24 November 2019 в 16:43
поделиться

WPF не является WinForms. Большинство, если не все, распространенные стратегии, которые вы используете для выполнения задач в WinForms, являются неправильным (или наименее эффективным) способом в WPF. Команды, свойства зависимостей, привязка, создание шаблонов и т. Д. - все будет менее полезным, если вы примете мышление WinForms.

В настоящее время мы разрабатываем большое приложение для визуализации. Как опытные программисты WinForms, в нашей первой демонстрации многомерных данных были предварительно вычислены тысячи визуальных элементов. Ползунок будет перемещаться по размерам визуальных элементов с помощью обратного вызова. Никакие данные не будут загружены после первоначальной настройки. Это имело очень низкую производительность.

Переключение на тысячи привязок с преобразователями данных только для нескольких сотен визуальных элементов с загрузкой и пересчетом данных на лету. Это привело к увеличению производительности на порядок. Было почти невероятно, что тысячи привязок будут быстрее, чем тысячи предварительно вычисленных визуальных элементов, но так обстоит дело в WPF.

« От WinForm к WPF: Краткое справочное руководство » может быть полезным.

11
ответ дан 24 November 2019 в 16:43
поделиться

Свойства зависимостей заняли некоторое время. Вот хорошая статья , и еще одна , которая помогла мне с этой новой концепцией.

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

A ключевое значение зависимости Система свойств заключалась в возможности строить свойства, которые автоматически уведомить любую зарегистрированную заинтересованную сторону каждый раз стоимость собственности изменения. Это бесплатно, безболезненно и автоматическая реализация модель наблюдателя чрезвычайно мощный и значительно снижает нагрузка на клиентского программиста (в Фактически, система привязки данных зависит на нем!)

В целом, я также обнаружил, что предыдущий опыт веб-разработки (в частности, пользовательского интерфейса браузера) очень полезен для "получения" WPF. Это больше связано с мышлением, которое он позволяет вам привнести в WPF, по сравнению с тем, кто когда-либо работал только с Windows Forms или другими многофункциональными клиентскими приложениями.

Еще несколько очевидных параллелей из веб-мира - это CSS, плавные макеты, анимация jQuery , всплытие / маршрутизация событий и просто удобство работы с обширным браузером и объектными моделями DHTML.

6
ответ дан 24 November 2019 в 16:43
поделиться

Шаблоны данных (и шаблоны управления в этом отношении).

На первый взгляд, это довольно просто, но как только вы начнете пытаться настроить привязку между различными файлами XAML, это может

Я полагаю, что мне, наконец, удалось разобраться в этом, просмотрев множество документов MSDN, но, более того, методом проб и ошибок. Обычно лучший способ изучить любую технологию - это поиграть с вещами.

1
ответ дан 24 November 2019 в 16:43
поделиться

Я все еще не могу указать целевое свойство в анимации без шпаргалки:

<DoubleAnimation
Storyboard.TargetProperty=
"(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" 
To="1.2" Duration="0:0:.2" />
1
ответ дан 24 November 2019 в 16:43
поделиться

Давайте рассмотрим это с точки зрения новичков. Я использую простой редактор, например KaXML или Sharpdevelop для разработки WPF. и я обнаружил, что не могу продолжить разработку базы данных без компонента сетки базы данных. Так что это не похоже на формы Windows . Начните поиск компонента сетки коммерческой базы данных. и в защиту люди скажут, что это не самое сложное или ограничение.

Для разработки серьезных приложений необходимо работать с файлами C # или другими языковыми файлами, поддерживаемыми .NET Framework. Если это не делает его проблематичным, зачем мне его использовать в первую очередь. Я доволен C #, почему мне нужно использовать WPF?

Самые сложные вещи на данный момент:

  1. Связывание данных,
  2. Зависимость от другого языка (например, C #),
  3. Графические возможности.
1
ответ дан 24 November 2019 в 16:43
поделиться

Одно дело читать книги и разбираться в материалах, а другое - применять их в своем проекте. Я создавал относительно простой элемент управления списком контактов, как и в Outlook, и натолкнулся на множество небольших, но заметных кривых обучения.

  1. Во-первых, создание шаблонов кажется простым, когда вы читаете, но становится сложнее, когда вы играете с ним. Было сложно просто установить цвет фона пользовательского элемента управления, когда текстовое поле получает фокус. Оказалось, что мне пришлось использовать DataTrigger (кто бы мог подумать).
  2. Использование оболочки в качестве ItemsPanel для окна списка внезапно стало проблемой, так как не было упорядочивания элементов (с этим нужно играть).
  3. Определенно RelativeSource в привязке.

В принципе, возможность привязать элементы управления в вашем шаблоне (от родительского к дочернему и наоборот) - это хороший способ обучения.

Мой совет. Напишите небольшое приложение, и вы увидите, как все складывается.

0
ответ дан 24 November 2019 в 16:43
поделиться

Различия в синтаксисе привязки заключались в одном; т.е. когда использовать Binding, а когда - StaticResource / DynamicResource. Когда я впервые изучал WPF, я все время путал их.

Поначалу было трудно понять различные формы DP и присоединенных свойств.

0
ответ дан 24 November 2019 в 16:43
поделиться

Я бы сказал, что самыми сложными моментами, когда я начал изучать WPF, были:

  • Стили и шаблоны: мне потребовалось некоторое время, чтобы понять, когда какие использовать и как они взаимодействуют друг с другом
  • Сложные привязки с RelativeSource , преобразователи ...
  • Триггеры: Иногда я все еще не понимаю, где использовать DataTrigger s, Trigger s или EventTrigger s ...
  • Механизмы свойств зависимостей и присоединенных свойств
  • Как работают перенаправленные события

Есть много мелких вещей, которые поначалу могут показаться трудными, если у вас есть опыт работы с Windows Forms. Вам нужно отучиться многому, и переключиться на совершенно иную ментальную модель структуры пользовательского интерфейса.

Сначала я начал писать код, как в Windows Forms, с большим количеством кода программной части, но это определенно был неправильный путь. Шаблон MVVM действительно помог мне проникнуть в «философию» WPF ...

Моим основным источником документации для изучения WPF был, конечно, MSDN, где вы можете найти большинство ответов, если знаете, как смотреть. Я также многому научился в следующих блогах:

10
ответ дан 24 November 2019 в 16:43
поделиться

Макет отличается в WPF см. http://blogs.msdn.com/b/wpfsldesigner /archive/2010/06/03/layout-techniques-for-windows-forms-developers.aspx, чтобы узнать, как использовать редактор макета

1
ответ дан 24 November 2019 в 16:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: