Честно говоря, самое лучшее, простое и чистое решение - сделать еще одну версию метода Main
, которая принимает System.Windows.Controls.Control
вместо System.Windows.Forms.Control
. Они даже могут быть перегружены (имеют одно и то же имя). Изменения в этой новой версии, вероятно, будут очень небольшими и простыми.
Однако, если предположить, что Main
- это какой-то огромный, сложный метод, который будет кошмаром даже для взгляда - или у вас нет источникакод больше - и вы действительно должны использовать существующий метод, есть еще одна потенциальная опция:
Создайте класс, который наследуется от System.Windows.Forms.Control
, который будет действовать как оболочка вокруг System.Windows.Controls.Control
. Вы можете использовать new и / или override ключевые слова, чтобы заменить существующие свойства в System.Windows.Forms.Control
, и вместо этого предоставить эквивалентные свойства System.Windows.Controls.Control
.
. поспешный пример:
class WinformsControlWrapper : System.Windows.Forms.Control
{
protected System.Windows.Controls.Control WrappedControl;
public WinformsControlWrapper(System.Windows.Controls.Control wrappedControl)
{
WrappedControl = wrappedControl;
}
public new int Width
{
get { return (int)WrappedControl.Width; }
set { WrappedControl.Width = value; }
}
}
Конечно, есть множество проблем даже с приведенным выше примером: тот факт, что WPF использует double
, а winforms использует int
, и тот факт, что WPF имеет и Width
, иActualWidth
чтобы назвать пару. Но вы, вероятно, сможете написать свой класс так, как вам нужно.
Опять же, создание другой версии Main
- это гораздо более простое, понятное и, вероятно, более простое решение. Но если вы действительно не можете, вышеуказанная тактика должна сработать.