E
asc schrieb:
Nein, GDI wird von WPF nicht mehr verwendet (WPF baut komplett auf DirectX auf, und verwendet auch die Win32 API nicht mehr).
Nur innerhalb des Client bereichs, die Window Titelleiste und die Minimieren, Maximieren und Schließen Buttons werden auf den alten Wege gezeichnet.
@Fresh0razoR
Für alle Controls kannst du ein Style festlegen:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Nun sind alle Controls per Default im Luna style, auch unter Windows XP.
Das wird aber nicht empfohlen, eine Applikation sollte stets so aussehen wie das Window Theme es vor gibt.
Den Fensterramen kannst du selber nicht beeinflussen, was du machen kannst ist ein Rahmenloses Fenster zu machen (WindowStyle = None) und den Rahmen sowie die System Buttons in WPF Selber zu zeichnen, dann musst du dich aber um alles selber kümmern.
Wenn du mit der WinApi vertraut bist kannst du dich auch in den Fenster WinApi Handle hooken, da hast du dann alle WinApi Möglichkeiten:
public class CustomWindow : Window
{
protected override void OnSourceInitialized(EventArgs e)
{
var handle = (new WindowInteropHelper(this)).Handle;
HwndSource.FromHwnd(handle).AddHook(new HwndSourceHook(WindowProc));
base.OnSourceInitialized(e);
}
private static IntPtr WindowProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch (msg)
{
case 0x0024:
//WmGetMinMaxInfo(hwnd, lParam); //Just an example
handled = true;
break;
}
return (IntPtr)0;
}
}
Benutzung dann:
namespace DemoApp
{
public partial MyWindow : CustomWindow
{
public MyWindow1()
{
InitializeComponent();
}
}
}
<Custom:MyWindow x:Class="DemoApp.MyWindow" xmlns:Custom="clr-namespace:DemoApp">
</Custom:MyWindow>
//Edit: Demo Code ausgebessert ^^