Переход C# между GDI + и WPF

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
25
задан R.J. Dunnill 28 May 2019 в 19:59
поделиться

3 ответа

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

Это - то, что мы делаем теперь (перемещающий приложение 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 для обеспечения пользовательское выглядящих частей пользовательского интерфейса.

Позволяют мне перечислить некоторые из тех дополнительных путей:

  1. Стиль существующее управление с помощью возможностей моделирования WPF.
  2. Используют в своих интересах модель содержания WPF и/или средства управления, полученные из ContentControl. Это позволяет Вам засовывать произвольно выглядящее 'содержание' в зрительный ряд управления (например, возможно засовывать пользовательскую вовлеченную форму в середину кнопки).
  3. Составляют управление из других средств управления/элементов путем использования в своих интересах UserControl.
  4. Происходят из существующего управления/класса в WPF, расширяясь это - поведение и обеспечение различного набора по умолчанию зрительного ряда.
  5. Происходят из FrameworkElement, создавая пользовательский элемент WPF, путем переопределения некоторых или всех MeasureOverride, ArrangeOverride и методов OnRender.
  6. И больше...., если можно верить ему.

В Windows Forms, это было похоже, они дали Вам молоток (UserControl) и отвертку (Управление). Однако в WPF... они дали Вам целую панель инструментов со всеми 100 инструментами. И это - часть причины большего, чем нормальная кривая обучения. Однако теперь можно взять тот, видел, что Вы никогда не имели прежде, и используйте его для, проводил конец 2x4 вместо того, чтобы использовать молоток и/или отвертку, чтобы попытаться сделать то же самое.

Ресурсы

(Хорошие новости - то, что существует много вне ресурсов там для помощи Вам.)

  1. Книги
    • Программирование WPF Chris Sells & Ian Griffiths (в частности, глава 18)
    • Pro WPF Matthew MacDonald (в частности, глава 24)
    • WPF, Развязанный Adam Nathan (в частности, глава 16)
    • Приложения = Код + Разметка Charles Petzold (в частности, главы 10, 11, & 12)
    • Существенный WPF Chris Anderson (в частности, глава 3)

      Мои любимые книги являются книгой Charles Petzold и книгой Adam Nathan. Однако глава 18 Программирования WPF Sells & Griffiths является действительно замечательным обзором предмета, и в особенности покрытием вопроса: мне действительно нужен пользовательский элемент управления?
  2. Форумы
    • Форум WPF
    • StackOverflow
      Здесь является двумя сообщениями в особенности, что Вы захотите смотреть на ( один , два ).
  3. MSDN
    я соглашаюсь с Bijington что документация MSDN превосходный.

  4. Блоги
    В один из двух сообщений StackOverflow, на которые я ссылаюсь в разделе Forums выше, я указываю на ряд блогов на мой, 'должен прочитать' список. В частности, я особенно указал бы на блоги павана Podila и Kevin Moore . Kevin Moore раньше был кормушкой программы WPF для средств управления WPF, и у него есть хороший набор средств управления, названных WPF Bag-o-Tricks, которые полезны, но что еще более важно, средства управления, из которых можно извлечь уроки.

  5. Образцы, Образцы и больше Образцов
    существует только тонна образцов там. Почти слишком многие! Я указал бы на семья. Покажите (это было создано как сквозной ссылочный образец для WPF), и я укажу на образцы SDK WPF и в особенности на образцы Настройки Управления в том разделе.

37
ответ дан Community 28 November 2019 в 21:11
поделиться

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

Это - самый трудный аспект миграции на WPF. Ваш класс управления определяет контракт поведения и представляет свойства, которые будут использоваться для рендеринга, и ControlTemplate используется, чтобы определить, как управление смотрит.

Это - также одна из наиболее мощных функций WPF; в будущем потребитель Вашего управления может измениться, как это смотрит, не изменяясь, как это ведет себя. Это допускает намного более легкий theming Ваших средств управления.

3
ответ дан Abe Heidebrecht 28 November 2019 в 21:11
поделиться

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

Лично я нашел веб-сайт MSDN чрезвычайно полезный, если не stackoverflow является очень хорошим местом для знания. Я был бы рад дать подсказки, если Вам нужен кто-либо.

Также, если у Вас когда-нибудь есть какие-либо вопросы о привязке данных этого, место для движения: BEA, Коста , она покрыла большую часть материала там.

На дополнительной ноте мы испытали огромное улучшение производительности с использованием wpf по GDI.

2
ответ дан Bijington 28 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

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