2012-08-26 38 views
1

我試圖在簡單的WPF應用程序中使用使用winforms的MonthCalendar控件。我發現通過使用WindowsFormsHost,可以在wpf應用程序中使用winforms控件。它適用於WinForms的內置控件,但是當我嘗試實例化此控件MonthCalendar的對象時,出現錯誤,提示「無法實例化MonthCalendar的對象」。試圖在wpf應用程序中使用winforms控件

有關爲什麼會發生這種情況以及如何解決這個問題的任何建議?在XAML 爲的MonthCalendar的源代碼可在http://www.codeproject.com/Articles/10840/Another-Month-Calendar?msg=2298161#xx2298161xx

林實例吧:

<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框架4" (NOT客戶端配置文件)
  • 從引用添加System.Windows.Forms的和WindowsFormIntegration

  • 下載的MonthCalendar:
    http://www.codeproject.com/KB/selection/MonthCalendar/MonthCalendar_src_vs2005.zip

  • 提取物的MonthCalendar,並添加作爲現有項目解決方案
  • 將MonthCalendar平臺更改爲「.Net Framework 4」(非客戶端配置文件)
  • 刪除並重新添加System.Design參考,以便我們在XAML
; E在WPF應用程序的.NET 4一個
  • 添加參考的MonthCalendar項目
  • 使用命名空間引用的xmlns::PC = 「組件=的MonthCalendar Pabo.Calendar CLR-命名空間」

    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

    我還有一個問題:如何在後面的代碼中使用它的名稱?如果我將此作爲名稱屬性添加到MonthCalendar,則xaml.cs文件似乎無法識別'myCalendar'。我嘗試將myWinFormsHost.Child投射到MonthCalendar,並將其分配給MonthCalendar的另一個對象,並且紅色波形消失。這是做到這一點的正確方法嗎? – user1340852

    +0

    您是否使用過Name =或x:Name =?....使用x:Name。 –

    相關問題