WPF-Fenster kooperieren nicht mit inoffiziellen Themen

1994
Sasha Chedygov

Vor einiger Zeit entschied ich mich für ein Patch uxtheme.dll(mit dem Universal Theme Patcher ), um die Verwendung inoffizieller Fensterdesigns zu ermöglichen. Das Problem ist, dass WPF-Anwendungen das benutzerdefinierte Design für native Windows-Steuerelemente (z. B. Bildlaufleisten und Schaltflächen) ignorieren und stattdessen das klassische Design verwenden.

Das ist mir zum ersten Mal bei Visual Studio 2010 aufgefallen:

Visual Studio

Ich dachte, es wäre ein Fehler im Programm selbst, aber das Erstellen meiner eigenen WPF-Anwendung führt zu demselben Ergebnis:

Benutzerdefinierte WPF-App

Beim Googeln wird gezeigt, dass ich nicht die einzige Person mit diesem Problem bin, aber keine Lösung gefunden habe.

Kann ich irgendetwas dagegen tun? Sollte ich einen anderen uxtheme.dllPatcher ausprobieren? Oder ist es das, was ich versuche zu [Keuchen] Windows anpassen?

2
das ist der Grund. Der Versuch, Windows ein bisschen schöner zu machen, macht WFP-Apps hässlicher. Nun, es ist nicht möglich, nach der Verwendung von soft7 wieder auf Aero zuzugreifen (ich habe es versucht, aber ich glaube, ich habe ein bisschen in meinen Mund gekotzt;)) lebe damit flying sheep vor 12 Jahren 0
@flyingsheep: Ja, darauf kommt es an. Zum Glück für mich ist Visual Studio die einzige WPF-Anwendung, die ich regelmäßig verwende. Die Auswirkungen sind wirklich minimal, daher fällt mir das kaum auf. Auf einer größeren Skala, mit vielen WPF-Apps, würde ich mir vorstellen, dass es wirklich nervig wird. Sasha Chedygov vor 12 Jahren 0

4 Antworten auf die Frage

2
Dwayne Samuels

Derzeit können Sie nichts dagegen unternehmen. WPF-Anwendungen haben ein eigenes Design [das nicht mit dem Windows-Design gekoppelt ist]. Das Beste, was ich vorschlagen könnte, ist, dass Sie eine App schreiben oder Ihre eigene DLL erstellen, durch die das WPF-Design in die von Ihnen gewünschte geändert wird. Dafür würden Sie viel Anerkennung finden.

Hmm, das ist wirklich interessant, das wusste ich nicht. Ich sehe was ich tun kann. :) Sasha Chedygov vor 13 Jahren 0
Bestätigt. WPF enthält eine Version jedes integrierten Windows-Designs, das in XAML übersetzt wird. Ich bin mir nicht sicher, warum sie so etwas tun würden (ich denke, Sie könnten Systemstile überschreiben?), Aber ich kann nicht viel dagegen tun. Sie könnten theoretisch eine Anwendung schreiben, die die `.theme'-Datei des benutzerdefinierten Designs verwendet, in ein WPF-Design übersetzt und es dann in WPF einfügt, sodass das neu erstellte Design geladen wird. Aber das ist eine Menge Arbeit - viel mehr, als ich leider dazu bereit bin. Sieht so aus, als müsste ich mich mit beschissenen Bildlaufleisten befassen. :( Sasha Chedygov vor 13 Jahren 0
Ich denke, solange Sie nicht WinXP, Vista Basic oder 7 Basic verwenden, werden Ihre Balken und Schaltflächen, wenn sie nicht gestaltet sind, eher in Ordnung aussehen Dwayne Samuels vor 13 Jahren 0
Ja, aber stell dir jemanden vor, der ein dunkles Thema verwendet. Silberne Bildlaufleisten und Schaltflächen sehen wirklich unpassend aus. : / Sasha Chedygov vor 13 Jahren 0
1
AlexKven

Es gibt eine gute Lösung für dieses Problem. Das folgende Verfahren weist WPF an, das Windows Vista / 7-Design anstelle von Windows Basic (für die Steuerelemente) zu verwenden.

Der Grund dafür, dass die Verwendung eines neuen Designs diese Probleme verursacht, besteht darin, dass wpf herausfindet, welches Design festgelegt ist, indem der Dateiname des aktuell aktivierten visuellen Stils überprüft wird. Wenn der Name "aero.msstyles" lautet, wird das Aero-Design verwendet. Wenn es sich um "luna.msstyles" handelt, geht es einen Schritt weiter und überprüft das aktuelle Farbschema, um die Farben fein abzustimmen (NormalColor, Metallic, Homestead sind die Farbschemata für Windows XP, Windows Vista gibt das Farbschemakonzept voll und ganz zu Gunsten von) Windows Aero). In wpf gibt es auch ein integriertes Thema für "royale.msstyles". Wenn die Design-Datei einen Namen hat, den wpf nicht erkennt, wird stattdessen nur das grundlegende Windows-Design verwendet.

Die Problemumgehung? Benennen Sie Ihren visuellen Stil von "} .msstyles" in "aero.msstyles" um, und ändern Sie dann die zugehörigen ".theme" -Dateien im Editor, um den neuen Namen zu berücksichtigen (beachten Sie, dass Sie den visuellen Stil jetzt nur mit einem Design anwenden können Datei). WPF zeigt jetzt den Windows Vista-Style anstelle von Windows Basic ;-).

Dies ist definitiv ein guter Workaround, löst aber nicht das Kernproblem. Angenommen, ich habe ein dunkles Thema verwendet - die Standard-Aero-Steuerelemente würden wirklich fehl am Platz aussehen. Aber so oder so, großartige Entdeckung! Vielen Dank! Sasha Chedygov vor 12 Jahren 0
0
Kyle

Ich habe diese Frage auch vor einiger Zeit gestellt und konnte keine Antworten finden.

https://stackoverflow.com/questions/7495906/visual-studio-2010-classic-system-theme

Das einzige von Visual Studio 2010 unterstützte Design ist das Standard-Aero-Design. Ich habe schon bemerkt, dass einige Themen es unterstützen, aber die meisten nicht.

Ich habe alles versucht, VS2010 als Administrator ausführen, im Kompatibilitätsmodus ausführen, SP1 installieren / deinstallieren usw.

Wir müssen uns an die Regeln von Microsoft halten: P

Es ist sinnvoll, dass Visual Studio keine benutzerdefinierten Themen unterstützt, theoretisch ist es Sache des Programmierers, diese zu unterstützen und zur Verfügung zu stellen. Windows XP führt zu einem wirklich seltsamen Problem für Programmierer, die ein benutzerdefiniertes Thema "unterstützen" müssen und nicht viel davon haben Werkzeuge dazu. Ramhound vor 12 Jahren 1
0
tfw

plz Entschuldigung, ich hatte nicht genug "Punkte", um aus dem Kontext von AlexKvens Antwort etwas zu kommentieren oder zu erklären

Ich wollte nur hinzufügen, für Interessierte…

In der *.themeDatei müssen Sie aero.msstylesin Titlecase angeben . also sollte es so etwas wie Path=%ResourceDir%\themes\path\to\Aero.msstylesgegen lesen ...\aero.msstyles.

Siehe auch: github.com/riverar/uxstyle