1. 引言
最近在搭建一個WPF的插件框架,需要將WPF界面封裝到各個插件類庫中。而默認情況下建立的C#類庫,是不能添加WPF元素的,這就需要我們手動對項目設置進行一些調整。下面就說說具體的設置過程。
2. 創建WpfLib項目
我們創建一個名稱為WpfLib的類庫項目,這時鼠標右鍵項目名稱》添加,彈出的菜單如下圖:

可以發現,菜單項中並沒有關於WPF元素的菜單項(如窗口、頁、用戶控件、資源字典)。
3. 修改WpfLib.csproj
用記事本打開WpfLib.csproj文件,情形如下:

在其第一個PropertyGroup節點的最后添加一行:
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
此時,WpfLib.csproj的第一個PropertyGroup節點變為:
<PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProjectGuid>e04974de-aa8c-429e-bb72-ac23afca7f9c</ProjectGuid> <OutputType>Library</OutputType> <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>WpfLib</RootNamespace> <AssemblyName>WpfLib</AssemblyName> <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <FileAlignment>512</FileAlignment> <Deterministic>true</Deterministic> <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> </PropertyGroup>
其中,黃色的那行就是我們上一步添加上去的。此時我們再右鍵項目名稱》添加,彈出的菜單項就發生了變化了:

這說明我們此時就可以添加WPF元素了。我們在項目中添加個Window1,可以成功添加。別急,看看Window1.xaml,

看來我們的工作還沒有做完……
4. 添加相關引用
在主程序中添加如下引用:
PresentationCor(4.0.0.0)
PresentationFramework(4.0.0.0)
System.Xaml(4.0.0.0)
WindowBase(4.0.0.0)
此時再看添加的Window1.xaml,發現已經正常了。但莫急,請繼續往后看……
5. 修改Assembly.cs
再Assembly.cs中添加一行代碼:
[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
這行代碼的作用是,當WPF尋找控件時,給其指明主題字典(控件樣式)在類庫中的存儲位置。
Over!
