Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
(я приношу извинения заранее за длинное сообщение..., был именно так очень, я хотел передать... Я надеюсь, что это помогает Вам.)
Это - то, что мы делаем теперь (перемещающий приложение Windows Forms с интенсивным использованием пользовательских (GDI +) оттянутые средства управления к WPF). На самом деле моя роль в команде должна была создать их GDI + средства управления... и теперь создавать WPF.
я соглашаюсь с Bijington, что, подавая Вашу заявку полностью 100%-й WPF с нуля является способом пойти..., если можно убедить власть имущих идти тем путем. Однако мы сами преобразовываем наше оперативное приложение Windows Forms, используя в своих интересах WPF interop возможности. Существуют некоторые ограничения, но в целом это был эффективный подход (и не столь печальный, как я ожидал бы).
то, Что я предложил бы, - то, что Вы берете один из своего GDI + средства управления и создаете то же управление в WPF. И затем, когда Вы будете закончены, выбросьте его и сделайте это снова. Вы неизменно изучите что-то во время первого усилия... и обнаружите, что существует лучший способ сделать это вместо этого. Я запустил бы с чего-то маленького..., пользовательская кнопка является хорошим местом для начала.
Выполнение вышеупомянутого даст Вам вкус к тому, что будет необходимым для всего остального, что Вы хотите сделать.
Одна вещь я предупредил бы Вас о, кривая обучения WPF, особенно если Вы происходите из среды Windows Forms... и особенно если Вы собираетесь быть создающими пользовательское выглядящими средствами управления. Как Abe упомянул, это - совершенно другой мир. WPF определенно приносит много питания, но то питание прибывает в стоимость изучения, как использовать его. Abe упоминает, как пользовательские элементы управления в WPF являются 'lookless' и что их 'взгляду' можно предоставить ControlTemplate. Это - только один из многих путей в WPF для обеспечения пользовательское выглядящих частей пользовательского интерфейса.
Позволяют мне перечислить некоторые из тех дополнительных путей:
В Windows Forms, это было похоже, они дали Вам молоток (UserControl) и отвертку (Управление). Однако в WPF... они дали Вам целую панель инструментов со всеми 100 инструментами. И это - часть причины большего, чем нормальная кривая обучения. Однако теперь можно взять тот, видел, что Вы никогда не имели прежде, и используйте его для, проводил конец 2x4 вместо того, чтобы использовать молоток и/или отвертку, чтобы попытаться сделать то же самое.
(Хорошие новости - то, что существует много вне ресурсов там для помощи Вам.)
MSDN
я соглашаюсь с Bijington что документация MSDN превосходный.
Блоги
В один из двух сообщений StackOverflow, на которые я ссылаюсь в разделе Forums выше, я указываю на ряд блогов на мой, 'должен прочитать' список. В частности, я особенно указал бы на блоги павана Podila и Kevin Moore . Kevin Moore раньше был кормушкой программы WPF для средств управления WPF, и у него есть хороший набор средств управления, названных WPF Bag-o-Tricks, которые полезны, но что еще более важно, средства управления, из которых можно извлечь уроки.
Образцы, Образцы и больше Образцов
существует только тонна образцов там. Почти слишком многие! Я указал бы на семья. Покажите (это было создано как сквозной ссылочный образец для WPF), и я укажу на образцы SDK WPF и в особенности на образцы Настройки Управления в том разделе.
Существует парадигма, переключаются на нижний регистр, как Вы разрабатываете средства управления для WPF. Вместо того, чтобы определить все поведение и ищут управление, Вы только определяете намеченное поведение.
Это - самый трудный аспект миграции на WPF. Ваш класс управления определяет контракт поведения и представляет свойства, которые будут использоваться для рендеринга, и ControlTemplate используется, чтобы определить, как управление смотрит.
Это - также одна из наиболее мощных функций WPF; в будущем потребитель Вашего управления может измениться, как это смотрит, не изменяясь, как это ведет себя. Это допускает намного более легкий theming Ваших средств управления.
Это - на самом деле проект, я продолжаю работать в данный момент, хотя мне повезло быть в состоянии запуститься снова. Если бы можно сделать это, я настоятельно рекомендовал бы его, очевидно, сохранив базовую функциональность старой системы/средств управления, но начал бы заново. Всегда хорошо начать с основы и знать, куда дела шли несправедливость/право ранее.
Лично я нашел веб-сайт MSDN чрезвычайно полезный, если не stackoverflow является очень хорошим местом для знания. Я был бы рад дать подсказки, если Вам нужен кто-либо.
Также, если у Вас когда-нибудь есть какие-либо вопросы о привязке данных этого, место для движения: BEA, Коста , она покрыла большую часть материала там.
На дополнительной ноте мы испытали огромное улучшение производительности с использованием wpf по GDI.