Динамически запускать пользовательский элемент управления на вкладке - PullRequest
1 голос
/ 15 мая 2010

У меня есть пользовательская система меню, в которой я хотел бы загрузить пользовательские элементы управления из другого проекта в элемент управления вкладками в моем основном проекте (элемент управления меню)

Управление пользователем Проект: foobar Система меню Проект: Меню

Функция загрузки их во вкладку управления:

private void LaunchWPFApplication(string header, string pPath)
        {
            // Header - What loads in the tabs header portion.
            // pPath   - Page where to send the user

            //Create a new browser tab object
            BrowserTab bt = tabMain.SelectedItem as BrowserTab;
            bt = new BrowserTab();
            bt.txtHeader.Text = header;
            bt.myParent = BrowserTabs;

             //Load in the path 
        try
        {
            Type formType = Type.GetType(pPath, true);
            bt.Content = (UserControl)Activator.CreateInstance(formType);
        }
        catch
        {
            MessageBox.Show("The specified user control : " + pPath + " cannot be found");
        }

            //Add the browser tab and then focus            
            BrowserTabs.Add(bt);
            bt.IsSelected = true;
        }

И что я отправляю функции в качестве примера:

LaunchWPFApplication("Calculater", "foobar.AppCalculater");

Но при каждом запуске приложение жалуется, что formType имеет значение null. Я запутался в том, как загрузить пользовательский элемент управления, и мне интересно, отправляю ли я правильные параметры.

1 Ответ

1 голос
/ 18 мая 2010

У меня была проблема с вызовом Type.GetType. Общий вызов, который MSDN дает:

Type formType = Type.GetType("AppCalculater");

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

Type formType = Type.GetType("foobar.AppCalculater");

Это, однако, все еще вызывало ошибку при вызове других файлов проекта в foobar. Чтобы получить пользовательские элементы управления в другом проекте, я добавил сборку после вызова элемента управления и пространства имен.

Type formType = Type.GetType("foobar.AppCalculater,foobar");

Затем я смог динамически ссылаться на все пользовательские элементы управления с помощью этого вызова. Таким образом, мой теперь обновленный вызов для загрузки пользовательского элемента управления из другого проекта в элемент управления моей вкладки выглядит следующим образом:

private void LaunchWPFApplication(string header, string pPath)
        {
            // Header - What loads in the tabs top portion.
            // Path   - Page where to send the user

            //Create a new browser tab object
            BrowserTab bt = tabMain.SelectedItem as BrowserTab;
            bt = new BrowserTab();
            bt.txtHeader.Text = header;
            bt.myParent = BrowserTabs;

            //Load in the path 
            try
            {
                Type formType = Type.GetType(pPath); //Example "foobar.foobarUserControl,foobar"
                bt.Content = Activator.CreateInstance(formType);
            }
            catch (ArgumentNullException)
            {
                MessageBox.Show("The specified user control : " + pPath + " cannot be found");
            }
            catch (Exception ex)
            {
                MessageBox.Show("An error has occurred while loaded the specified user control : " + pPath + ". It includes the following message : \n" + ex);
            }
            //Add the browser tab and then focus     
            try
            {
                BrowserTabs.Add(bt);
            }
            catch(InvalidOperationException)
            {
                MessageBox.Show("Cannot add " + pPath + " into the tab control");
            }
            bt.IsSelected = true;
        }
...