Преобразование приложения WPF в UserControl для использования в приложении WinForms через ElementHost - PullRequest
1 голос
/ 28 июля 2011

Я пытаюсь преобразовать это приложение WPF в WPF UserControl, чтобы я мог использовать его в приложении WinForms через ElementHost. Я новичок в WPF и никогда не трогал его до этой попытки, так что я могу поступить совершенно неправильно. Я получил проект UserControl для компиляции, однако мои StaticResources подчеркнуты в VS с сообщением " Ресурс 'x' не может быть разрешен ". Я попытался переместить xamls с необходимыми элементами x: Key на один уровень вверх (на тот же уровень, что и UserControl Dijagram.xaml), но он все еще не может их разрешить.

В приложении WinForms при попытке добавить UserControl через конструктор, выбрав размещенный контент в задачах ElementHost, я получаю следующую ошибку: " Произошла ошибка при попытке создать объект типа 'DijagramLC.Dijagram'. Make уверен, что тип имеет конструктор по умолчанию."(даже если конструктор по умолчанию существует).

Однако, если я добавлю это в codebehind, вот так:

wpfUserControl = new Dijagram();
elementHost1.Child = wpfUserControl;
Controls.Add(elementHost1);

код компилируется, но выдает эту ошибку времени выполнения: « System.Windows.Markup.XamlParseException:« Предоставить значение для «System.Windows.StaticResourceExtension», вызвало исключение ». Номер строки '20' и позиция строки '4'. ---> System.Exception: Не удается найти ресурс с именем 'MyToolbar'. Имена ресурсов чувствительны к регистру."

Я пробовал с App.xaml и без него и добавлял элементы ResourceDictionary для проблемных xamls, но в основном я понятия не имею, что я делаю:)

Я загрузил код в свой SkyDrive и был бы очень признателен, если бы кто-нибудь взглянул и сказал мне, что я делаю неправильно: https://skydrive.live.com/redir.aspx?cid=21be1f8e850e85cc&resid=21BE1F8E850E85CC!353

Я ненавижу вслепую прыгать в новую техонолию, как это, но на этот раз у меня не было выбора, и мне нужно знать, выполнимо ли мое требование таким образом.

Ответы [ 2 ]

2 голосов
/ 20 марта 2013

Проблема в том, что вам нужен конструктор по умолчанию, подобный этому:

public CreatedPollsUC()
{
    InitializeComponent();
}

Если в конструкторе есть какой-либо другой код, возникает ошибка:

public CreatedPollsUC()
{
    InitializeComponent();
    // ... more code
}

Поэтому, если вы хотите использовать дополнительный код в конструкторе, вам необходимо сначала применить элемент управления к элементу host. Затем вы можете редактировать конструктор.

1 голос
/ 16 января 2012

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

// When hosting a WPF usercontrol inside an element host, 
// application resources are not loaded, so we need to load them manually.
var resources = new ResourceDictionary
{
    Source = new Uri("/UNIT4.MKB.GUI.XAML.Dashboard.Resources;component/resources.xaml", UriKind.Relative)
};


// Check for null reference
if (Application.Current != null)
{
    //Merge the loaded ResourceDictornairy with the dummy application Resources.
    Application.Current.Resources.MergedDictionaries.Add(resources);
}
...