2012-08-26 4 views
1

Я пытаюсь использовать элемент управления MonthCalendar, который использует winforms, в простом приложении WPF. Я узнал, что с помощью WindowsFormsHost элементы управления winforms могут использоваться в приложениях wpf. Он работал для встроенных элементов управления winforms, но когда я пытаюсь создать экземпляр объекта этого элемента управления MonthCalendar, я получаю сообщение об ошибке «Невозможно создать экземпляр объекта MonthCalendar».пытается использовать элемент winforms в приложении wpf

Любые предложения относительно того, почему это происходит и как это преодолеть? Исходный код MonthCalendar доступен на http://www.codeproject.com/Articles/10840/Another-Month-Calendar?msg=2298161#xx2298161xx

Im инстанцировании его в XAML:

<Window x:Class="MonthCalendarTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
    xmlns:pc="clr-namespace:Pabo.Calendar" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid Height="65" Width="280"> 

    <WindowsFormsHost Margin="0,0,12,12" Height="100"> 
     <pc:MonthCalendar></pc:MonthCalendar> 

    </WindowsFormsHost> 
</Grid> 

+0

Как вы создаете экземпляр, в коде или в xaml? Если его код, возможно, вы можете добавить этот код к своему вопросу. – Surfbutler

+0

Извините, что забыл упомянуть, что я создаю экземпляр в xaml, см. Мой отредактированный пост. – user1340852

+0

Имеет ли 'MonthCalendar' конструктор без параметров? –

ответ

2

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

  • с помощью Visual Studio 2010
  • создать новое приложение WPF
  • смена платформы для».Net Framework 4" (НЕ профиля клиента)
  • добавить ссылки на System.Windows.Forms и WindowsFormIntegration

  • скачать MonthCalendar из:
    http://www.codeproject.com/KB/selection/MonthCalendar/MonthCalendar_src_vs2005.zip

  • экстракт MonthCalendar, и добавить как существующий проект для решения
  • изменить платформу MonthCalendar на «.Net Framework 4» (не профиль клиента)
  • удалить и повторно добавить ссылку System.Design, чтобы вы нас е в .NET 4 один
  • в Заявке WPF добавить ссылку на проект MonthCalendar
  • использовать ссылку пространства имен Xmlns: PC = "CLR-имен: Pabo.Calendar; сборка = MonthCalendar" в XAML

enter image description here

<Window x:Class="WpfApplication6.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
     xmlns:pc="clr-namespace:Pabo.Calendar;assembly=MonthCalendar" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid Height="65" Width="280"> 
     <WindowsFormsHost Margin="0,0,12,12" Height="100"> 
      <pc:MonthCalendar x:Name="myCalendar"/> 
     </WindowsFormsHost> 
    </Grid> 
</Window> 

Так что вы делаете по-другому?

Вы сохранили MonthCalendar в своем собственном проекте?

На какой платформе ОС вы работаете?

+0

+1: Спасибо! Я точно следил за твоими шагами, и это сработало! – user1340852

+0

У меня есть другой вопрос: как использовать его по имени в коде позади? Файл xaml.cs, похоже, не распознает «myCalendar», если я добавлю это как атрибут имени в MonthCalendar. Я попробовал лить myWinFormsHost.Child в MonthCalendar и присвоил его другому объекту MonthCalendar, а красный squiggly ушел. Правильно ли это? – user1340852

+0

Вы использовали Name = или x: Name =? .... use x: Name. –

Смежные вопросы