2012-03-11 7 views
12

me escribió un control de usuario en XAML y después de que se compila en C# la resultante de C# tiene esta línea:¿Dónde está mi ensamblado Microsoft.Windows.Themes?

using Microsoft.Windows.Themes; 

que arroja un error ahora:

El tipo o espacio de nombres 'Temas' no existe en el espacio de nombres '' Microsoft.Windows (¿falta una referencia de ensamblado?)

Pensé que ya no puedo afectará a la salida del compilado C# (no hay nada que Remov e de XAML), solo agregaría eso como referencia.

Sin embargo, el cuadro de diálogo Agregar referencia no contiene Microsoft.Windows.Themes. ¿Esto no es parte de .NET?

He aquí un ejemplo de control de usuario XAML que causa este problema:

<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> 

y C# código detrás de él:

using System; 
using System.Windows.Controls; 

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

Aquí está un ejemplo de compilado 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

estoy buscando bajo PresentationFramework.dll usando el reflector, parece que no puedo encontrar ninguno de los temas .dlls ¿dónde están ubicados físicamente? –

Respuesta

29

Microsoft.Windows.Themes se encuentra en los ensamblajes PresentationFramework específicos del tema. Usted querrá agregar una referencia a uno de los siguientes dependiendo de los cuales se hace referencia a uno en su XAML:

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

"¿Qué se hace referencia en su XAML"? No tengo referencias a tales cosas. ¿Cuál debería elegir? Voy a publicar mi XAML en mi pregunta en un segundo. – Tower

+0

Hmm, dejé tu código en un nuevo control de usuario en un nuevo proyecto de WPF y no produce esa declaración de uso para mí. ¿Dónde aparece exactamente en tu código la declaración de uso? – BoltClock

+0

Adjunté el código compilado XAML -> C#. Muestra el 'uso'. Probé Clean Solution y luego Rebuild Solution sin diferencias. – Tower

Cuestiones relacionadas