BladeLogan Ответов: 2

Как переписать код WPF в winform


Поэтому я работаю над небольшим проектом, в котором хочу подключить приложение к моей лампочке Wi-Fi.
У меня уже есть исходные файлы для оригинального приложения Windows, но оно сделано с помощью WPF.
Я хотел бы превратить его в приложение WinForm, потому что это значительно облегчает сборку и разработку, так как я не слишком хорошо разбираюсь в WPF.


Проблема в том, что даже при том, что у меня есть исходный код передо мной,
это очень запутанно. Я думал, что это будет просто копирование/вставка (звучит лениво,но мне нужна была такая же функциональность в WinForm)
но оказывается, что это было не так просто.

Как вы можете видеть по ссылке GitHub ниже,все есть.
https://github.com/dotMorten/LifxNet/tree/master/src/SampleApps/SampleApp.Windows

1. он находит подключенную лампочку(ы)
2. Свое способное для того чтобы включить его и выключать.

По какой-то причине было очень трудно найти, что именно делает и как преобразовать его в состояние WinForm, а не в WPF.

Вот в чем мне точно нужна помощь.

1. что делает приложение способным найти лампочку и как добиться того же самого в приложении WinForm. (Так как это, по-видимому, не тот же код, что и WPF)
2. какая функция управляет выключателем света (Вкл / Выкл )

Любая помощь очень ценится!

Что я уже пробовал:

Я пробовал читать код (приложение WPF) и пытался воссоздать его в WinForm, я также гуглил около 2 дней и безуспешно.

2 Ответов

Рейтинг:
1

OriginalGriff

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

Затем подумайте о копировании методов, не связанных с пользовательским интерфейсом, которые имеют дело со светом - или даже со всем классом, если он хорошо написан, - и напишите свой собственный пользовательский интерфейс для взаимодействия с ним.

Но конкретный код WPF не будет Вам здесь очень полезен.


BladeLogan

Спасибо за быстрый ответ! Я действительно оцениваю это как действительно!

Вот в чем дело..
Я нашел это в коде и он определяет местонахождение лампочек

ObservableCollection< LifxNet.Лампочка & gt; лампочки = новая наблюдаемая коллекция & lt;LifxNet.Лампочка>();
LifxNet.LifxClient клиент = значение null;

Теперь я добавил Это и необходимые ссылки, но что мне теперь делать? Нужно ли добавлять "лампочки" в список?

OriginalGriff

Этот код ничего не находит: он просто устанавливает список с включенными кнопками; что - то еще использует эту коллекцию, чтобы найти лампочки и заполнить ее-но это не тот код.

BladeLogan

Я предполагаю, что вы говорите о

частная Client_DeviceDiscovered недействительным(объект отправителя, LifxNet.LifxClient.DeviceDiscoveryEventArgs е)
{
var _ = диспетчер.Функции Runasync(Для Windows.Пользовательского интерфейса.Ядро.CoreDispatcherPriority.Нормальный, () =>
{
var bulb = e. устройство как LifxNet.лампочка;
если (!шарики.Содержит (лампочка))
лампочки.Добавить (лампочка);
});
}

OriginalGriff

Похоже, это ко мне...

Рейтинг:
0

Philippe Mori

Очевидно, что вам нужно понять код, чтобы преобразовать его. Таким образом, нет никакого смысла преобразовывать приложение WPF в WinForms, если вы его не понимаете.

Таким образом, учитывая, что вы не понимаете код WPF, то единственным оставшимся вариантом будет начать с пустого приложения WinForms и добавить все необходимые функции в приложение WinForms.

Но тогда, поскольку WPF намного мощнее WinForms, вы должны убедиться, что можете реализовать все, что хотите, в WinForms.

Но если приложение WPF, то зачем его преобразовывать? Если что-то не сломано, то не чините его.

Учитывая, что WPF намного превосходит по своим возможностям, а также должен более легко поддерживать устройства Hi-DPI и некоторые другие современные функции, почти никогда не имеет смысла конвертировать код WPF в WinForms.

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

WPF намного превосходит WinForms, потому что он помогает отделить пользовательский интерфейс от логики, так что можно иметь одного дизайнера пользовательского интерфейса, который не делает много программ для проектирования (в Blend), и иметь программиста, который делает модель пользовательского интерфейса, не делая пользовательский интерфейс. Это действительно приятно, так как пользовательский интерфейс гораздо меньше привязан к коду, поэтому проще изменить пользовательский интерфейс без изменения кода.

WPF также превосходен тем, что позволяет применять анимацию, преобразование и многое другое к пользовательскому интерфейсу...

О вашем коде
Здесь мы не делаем другой работы... Таким образом, если у вас есть конкретный вопрос, то покажите конкретный код, который вы хотели бы преобразовать. Никто здесь не станет преобразовывать целое приложение просто так.

И, как уже объяснялось, вся идея преобразования WPF в WinForms имеет мало смысла. Обычно было бы гораздо проще преобразовать WinForms в WPF, поскольку теоретически можно было бы написать приложение WPF на основе событий. Однако это имеет мало смысла, поскольку вы теряете все преимущества разделения пользовательского интерфейса и модели...


BladeLogan

Я дал вам 5 звезд, потому что да, не понимая кода, очень трудно понять, что нужно скрывать и т. д., Я вижу логику кода, но да, у вас были некоторые хорошие моменты.. И почему я хотел бы преобразовать его, так это потому, что у меня есть приложение распознавания голоса, сделанное в WinForm, и я хотел бы добавить к нему функции выключателя света. Но я думаю, что этого не произойдет, скорее всего, я сейчас брошу этот проект и, может быть, посмотрю на какие-нибудь другие лампочки, у которых есть лучшая документация, когда дело доходит до C#, или Ну ... что-то более широкое.

Спасибо за ответ!

Philippe Mori

Вы всегда можете объединить WinForms и WPF, но это предполагает минимальное понимание каждого из них...

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

Поэтому, если вам нравятся лампочки из вашего приложения WPF, но они нужны в приложении WinForms, лучшим компромиссом является размещение окон WPF внутри формы или UserControl. Добавление элемента управления хостом можно выполнить непосредственно из конструктора.

BladeLogan

Я понимаю, что ты имеешь в виду! И это звучит здорово, если честно.
Короткий вопрос.. Мне только что сказали, что я должен отказаться от WinForms, потому что он мертв и устарел, и перейти на WPF.. Дело в том, что я изучаю C# уже около 6 месяцев, и мне кажется, что я выучил его только для того, чтобы мне сказали, что мне нужно бросить его и научиться чему-то новому. Мне нужно было бы честное мнение об этом, должен ли я отказаться от WinForms и начать с WPF?

Philippe Mori

Если вы хотите написать большое новое настольное приложение, поддерживающее Windows 7, WPF будет иметь гораздо больше смысла, чем WinForms.

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

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

В WPF код по-прежнему находится на языке C#. Главное отличие заключается в том, что в WPF нужно больше стараться избегать кодирования. Таким образом, он отделяет пользовательский интерфейс от логики. Таким образом, с точки зрения обучения большая часть того, что вы узнали, все еще может быть полезно с WPF, и большая часть того, что вам все еще нужно узнать, - это дополнительные материалы (XAML) и другие связанные с дизайном части, если вы хотите настроить стиль и тому подобное...

В интернете есть много учебных пособий по WPF. Кстати, я еще не специалист по WPF, так как сделал с ним всего несколько окон, и мой код когда-то был в стиле WinForms...

В любом профессиональном приложении логика должна быть в ViewModel, а не в пользовательском интерфейсе (то есть в коде, стоящем за файлами).

На самом деле, большинство современных фреймворков пользовательского интерфейса используют какой-то MVVM/MVC/MVP/...

BladeLogan

Допустим, я собирался искать работу девелопера в городе .NET framework, что было бы более вероятно увидеть на рабочем месте, Winform или WPF? Также Спасибо за отличные указатели!

BillWoodruff

"что было бы более высоким шансом увидеть на рабочем месте, Winform или WPF?"

Это важный вопрос, но ответить на него сложно и требует рассмотрения ваших навыков, ваших целей и характера рынка труда, на котором вы планируете работать.

BladeLogan

Это был хороший ответ, Спасибо! :Д