Windows 7: Wie aktiviert man den Aero Glass Effekt in WPF-Anwendungen?
Der beliebte Windows Aero Glas Effekt kann auch sehr einfach in eigenen WPF (Windows Presentation Foundation) – Anwendungen verwendet werden.
Das folgende Beispiel zeigt wie eine Anwendung “ohne” Hintergrundfarbe aussieht. Etwas schicker als das “Windows-Grau”, oder?
Das folgende Video zeigt wie man eine Glas Anwendung erstellt. Der Beispiel-Code dazu kann am Ende des Artikels heruntergeladen werden.
Sourcecode
Im Konstruktor der Window-Klasse die dargestellt werden soll, wird einfach folgender Code hinzugefügt.
this.Loaded += (s, e) =>
{
GlassEffectHelper.EnableGlassEffect(this);
};
Die GlassEffectHelper-Klasse sieht wie folg aus:
public class GlassEffectHelper
{
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern bool DwmIsCompositionEnabled();
public static bool EnableGlassEffect(Window window)
{
window.MouseLeftButtonDown += (s, e) =>
{
window.DragMove();
};
return EnableGlassEffect(window, true);
}
public static bool EnableGlassEffect(Window window, bool enabled)
{
return EnableGlassEffect(window, enabled, new Thickness(-1));
}
public static bool EnableGlassEffect(Window window, bool enabled, Thickness margin)
{
if (!VersionHelper.IsAtLeastVista)
{
// Go and buy Windows 7 ;-)
return false;
}
if (!DwmIsCompositionEnabled())
{
return false;
}
if (enabled)
{
IntPtr hwnd = new WindowInteropHelper(window).Handle;
// Hintergrundfarbe von Fenster Transparent darstellen
window.Background = Brushes.Transparent;
// Die Farbe festlegen auf die den Glaseffekt bekommt
HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor =
Colors.Transparent;
// Den Bereich für den Glaseffekt definieren
MARGINS margins = new MARGINS(margin);
// Glasseffekt aktivieren
DwmExtendFrameIntoClientArea(hwnd, ref margins);
}
else
{
// Hintergrundfarbe des Fensters zurück auf die
// Systemfarbe stellen
window.Background = SystemColors.WindowBrush;
}
return true;
}
In dieser Klasse werden zwei Methoden aus dwmapi.dll Import die vom System zur Verfügung gestellt werden.
Die Klasse VersionHelper stellt eine kleine Versionsprüfungsmethode zur Verfügung, um zu checken ob man sich überhaupt auf einem Vista- oder Windows 7-Rechner befindet.
/// <summary>
/// Helpmethods for OS Version checks
/// </summary>
public class VersionHelper
{
/// <summary>
/// OS is at least Windows Vista
/// </summary>
public static bool IsAtLeastVista
{
get
{
if (Environment.OSVersion.Version.Major < 6)
{
Debug.WriteLine("How about trying this on Vista?");
return false;
}
return true;
}
}
/// <summary>
/// OS is Windows 7 or higher
/// </summary>
public static bool IsWindows7orHigher
{
get
{
if (Environment.OSVersion.Version.Major == 6 &&
Environment.OSVersion.Version.Minor >= 1)
{
return true;
}
else if (Environment.OSVersion.Version.Major > 6)
{
return true;
}
else
{
return false;
}
}
}
}