2012-03-11 41 views
12

我在XAML中寫了一個用戶控件,它被編譯成C#後,得到的C#有這樣一行:我的Microsoft.Windows.Themes程序集在哪裏?

using Microsoft.Windows.Themes; 

現在拋出一個錯誤:

類型或命名空間名稱「主題」在命名空間中不存在 「Microsoft.Windows」(是否缺少程序集引用?)

我想既然我可以在不影響編譯的C#輸出(沒有什麼祛瘀e來自XAML),我只是將其添加爲參考。

但是,「添加引用」對話框不包含Microsoft.Windows.Themes。這不是.NET的一部分嗎?

下面是導致此問題的一個例子XAML用戶控制:

<UserControl x:Class="GG.UserControls.MainMenu" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 

    <StackPanel> 
     <Menu VerticalAlignment="Top" Background="{x:Null}"> 
      ... // Just static menu items. 
     </Menu> 
    </StackPanel> 

</UserControl> 

與C背後#代碼:

using System; 
using System.Windows.Controls; 

namespace GG.UserControls 
{ 
    /// <summary> 
    /// Interaction logic for MainMenu.xaml 
    /// </summary> 
    public partial class MainMenu : UserControl 
    { 
     public MainMenu() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

以下是編譯的C#示例:

#pragma checksum "..\..\..\..\UserControls\MainMenu.xaml" "{406ea660-64cf-4c82-b6f0-42d48172a799}" "5A85C5B16565514165AD23641F944BC6" 
//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated by a tool. 
//  Runtime Version:4.0.30319.17020 
// 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

using GG; 
using GG.UserControls; 
using Microsoft.Windows.Shell; 
using Microsoft.Windows.Themes; // <---- WTF? 
using System; 
using System.Diagnostics; 
using System.Windows; 
using System.Windows.Automation; 
using System.Windows.Controls; 
using System.Windows.Controls.Primitives; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Ink; 
using System.Windows.Input; 
using System.Windows.Markup; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Media.Effects; 
using System.Windows.Media.Imaging; 
using System.Windows.Media.Media3D; 
using System.Windows.Media.TextFormatting; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using System.Windows.Shell; 


namespace GG.UserControls { 


    /// <summary> 
    /// ChangesetHistory 
    /// </summary> 
    public partial class MainMenu : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector { 

     private bool _contentLoaded; 

     /// <summary> 
     /// InitializeComponent 
     /// </summary> 
     [System.Diagnostics.DebuggerNonUserCodeAttribute()] 
     [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")] 
     public void InitializeComponent() { 
      if (_contentLoaded) { 
       return; 
      } 
      _contentLoaded = true; 
      System.Uri resourceLocater = new System.Uri("/GG;component/usercontrols/mainmenu.xaml", System.UriKind.Relative); 

      #line 1 "..\..\..\..\UserControls\MainMenu.xaml" 
      System.Windows.Application.LoadComponent(this, resourceLocater); 

      #line default 
      #line hidden 
     } 

     [System.Diagnostics.DebuggerNonUserCodeAttribute()] 
     [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")] 
     [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)] 
     [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")] 
     [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] 
     [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")] 
     void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { 
      this._contentLoaded = true; 
     } 
    } 
} 
+0

我使用的是反射PresentationFramework.dll下搜索,我似乎無法找到任何主題.dll他們在哪裏物理位置? – 2013-12-26 18:06:38

回答

29

Microsoft.Windows.Themes在主題特定的PresentationFramework程序集中找到。你要添加引用哪一個是你的XAML中引用這取決於以下情況之一:

  • PresentationFramework.Aero.dll
  • PresentationFramework.AeroLite.dll
  • PresentationFramework.Classic.dll
  • PresentationFramework.Luna.dll
  • PresentationFramework.Royale.dll
+0

「你的XAML中引用了什麼」?我沒有提到任何這樣的事情。我應該選擇哪一個?我會在第二個問題中發佈我的XAML。 – Tower 2012-03-11 18:37:09

+0

嗯,我把你的代碼放在一個全新的WPF項目中的新用戶控件中,並且它不會爲我生成使用語句。使用語句出現在代碼中的哪個位置? – BoltClock 2012-03-11 18:40:37

+0

我附加了已編譯的XAML - > C#代碼。它顯示「使用」。我已經嘗試過清潔解決方案,然後重建解決方案沒有區別。 – Tower 2012-03-11 18:48:47

相關問題