Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

1

05.06.2016, 19:09

[VSC 2015] XAML Designer startet programmiertes Fenster beim Speichern

Hallo Leute,

seit ungefähr einer Woche zeigt Visual Studio sehr seltsames Verhalten...

Ich habe mir ein UserControl mit Code-Behind und Styles programmiert, von dem ich dann weitere Fenster ableite. Dabei habe ich mich hier dran gehalten. Das BasisControl heißt BaseWindowPanel und hat die Eigenschaft, dass es ein Fenster erstellt und sich dort hineinfügt, wenn es keinen Parent hat. Klappt auch alles schön. Nun habe ich folgenden Code:

Quellcode

1
2
3
4
5
6
<dw:BaseWindowPanel x:Class="ACALC.DockWindow.SingleWindowPanel"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:dw="clr-namespace:ACALC.DockWindow">
    <CheckBox/>
</dw:BaseWindowPanel>
Wenn ich diese Datei öffne und abspeichere, dann öffnet sich das Fenster was ich da programmiert habe. Ich kann beliebige Elemente hineinpacken (was anderes als ne CheckBox) und ohne neu kompilieren zu müssen wird diese Datei anscheinend ausgeführt. Wenn ich einen Fehler in die XAML-Datei einbaue, dann passiert beim Speichern nichts. Das Fenster was geöffnet wird nennt sich im TaskManager XDescProc.exe. Das ist laut Google der XAML Designer von Visual Studio. Diese Datei befindet sich auch im Programmordner von VS.

Wie kommt dieses Verhalten zu stande? Ich habe nichts in den Einstellungen geändert und mit großer Wahrscheinlichkeit auch keinen Virus auf meinem Rechner. Wenn ich eine XAML-Datei öffne, die ein Window als Root-Tag hat, dann passiert nichts beim Speichern. Es scheint also an dieser Basisklasse zu liegen. Ich hoffe mir kann jemand helfen!

EDIT: Ich kann das Projekt auch mal hochladen, dann könnt ihr es mal ausprobieren. Sagt bescheid wenn!
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

2

08.06.2016, 20:53

Ich pushe das mal, indem ich den relevanten Teil des Projektes hochlade. Das Projekt ist nicht kompilierbar, denn es ist eine Klassenbibliothek. Das ist aber nicht schlimm, denn es geht nur ums Speichern. Bei mir wird sogar schon ein Fenster angezeigt, wenn ich das Projekt öffne. Wenn ich dieses Fenster schließe öffnet sich ein neues, nachdem dies geschlossen ist ist Ruhe. Kann mir jemand sagen ob das auf einem anderen Rechner reproduzierbar ist?

Ich hoffe sehr, dass mir jemand helfen kann - dieser Bug hält mich sehr vom Programmieren ab, weil ich bei jedem Speichern erstmal ein paar Fenster wieder schließen muss. :(
»CeDoMain« hat folgende Datei angehängt:
  • DockWindow.zip (316,24 kB - 17 mal heruntergeladen - zuletzt: 15.12.2023, 13:52)
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

10.06.2016, 13:30

Ich kann überhaupt nicht nachvollziehen was da bei dir abläuft. Klassenbibliotheken kann man natürlich übersetzen. Du kannst sie nur nicht direkt ausführen. Soll heißen der klick auf den grünen Pfeil in VS bringt dich natürlich nicht weiter aber übersetzt werden muss die Bibliothek natürlich schon.
Was dein eigentliches Problem angeht, was für ein Fenster öffnet sich denn da? Mach doch mal einen Screenshot. Ist das wirklich das Fenster was du da grad entwickelt hast? Ist das ne Art Extension? Visual Studio führt normal keinen Code aus nur weil du auf speichern klickst.
Zeig doch mal den relevanten Code der da deiner Meinung nach ausgeführt wird.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Tobiking

1x Rätselkönig

  • Private Nachricht senden

4

10.06.2016, 14:08

Das wird wohl die Vorschau des XAML Designers sein. Die parst nach jedem Speichern die XAML und code behind um das Element eingebettet in dem Vorschaubereich anzuzeigen. Wenn in dem Code dann ein neues Fenster erzeugt wird, löst sich das natürlich vom Vorschaubereich.

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

5

11.06.2016, 00:37

Das wird wohl die Vorschau des XAML Designers sein. Die parst nach jedem Speichern die XAML und code behind um das Element eingebettet in dem Vorschaubereich anzuzeigen. Wenn in dem Code dann ein neues Fenster erzeugt wird, löst sich das natürlich vom Vorschaubereich.
Ja, das kann es sein! Es sieht wie die Vorschau aus. Kann ich das abstellen? Ich will nicht sehen was ich programmiere - mein Code ist verständlich genug!

Zeig doch mal den relevanten Code der da deiner Meinung nach ausgeführt wird.
Den habe ich im ersten Post gepostet. Den restlichen Code findest du im Anhang des letzten Post. Genauer kann ich "relevant" leider nicht bestimmen.

EDIT: Ja klar, kann man das compilieren - ausführen geht halt nicht. Hab mich unglücklich ausgedrückt. ;)
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

11.06.2016, 07:38

Ich würde eher überlegen, ob es sinnvoll ist im Code behind ein Fenster zu öffnen und wie ich die Situation passend erkennen kann ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Toemsel

Treue Seele

Beiträge: 310

Wohnort: OÖ

Beruf: Student und Programmierer

  • Private Nachricht senden

7

11.06.2016, 10:38

Das liegt daran, dass dein Code beim speichern bereits ausgeführt wird. Im XAML viewer bekommst du immer eine "Live Ansicht".
Ein großer Vorteil vom WPF mit XAML in Kombination. Ohne bewusst zu kompilieren werden bereits Exceptions an dich weitergeleitet, um den Entwicklungsprozess zu beschleunigen.
Dieses Feature nennt sich "Edit and continue". Deaktivieren kannst du es unter "Tools -> Options -> Debugging -> Edit and continue -> Activate/Deactivate".

PS: Wozu das ganze? Es gibt genügend Frameworks die deine bereits ausprogrammierte Funktionalität liefern.

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

8

11.06.2016, 16:20

Ich würde eher überlegen, ob es sinnvoll ist im Code behind ein Fenster zu öffnen und wie ich die Situation passend erkennen kann
Wo soll ich denn sonst ein Fenster öffnen? Die Erkennung funktioniert schon bestens... oder ist das anders gemeint?

Dieses Feature nennt sich "Edit and continue". Deaktivieren kannst du es unter "Tools -> Options -> Debugging -> Edit and continue -> Activate/Deactivate".
Werde ich ausprobieren, sobald sich VS in meiner Rechweite befindet. Danke!
PS: Wozu das ganze? Es gibt genügend Frameworks die deine bereits ausprogrammierte Funktionalität liefern.
War klar, dass die Frage kommt. :D Ich kenne sehr wohl Anvalon Dock und konsorten, aber die sind mir zu mächtig - ich brauche eine ganz einfache Funktionalität und da dachte ich mir, selbst machen geht doch auch. Klappt ja auch wunderbar, solange ich die XAML-Datei nicht anfasse. :)
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

Toemsel

Treue Seele

Beiträge: 310

Wohnort: OÖ

Beruf: Student und Programmierer

  • Private Nachricht senden

9

11.06.2016, 23:33

War klar, dass die Frage kommt. :D Ich kenne sehr wohl Anvalon Dock und konsorten, aber die sind mir zu mächtig - ich brauche eine ganz einfache Funktionalität und da dachte ich mir, selbst machen geht doch auch. Klappt ja auch wunderbar, solange ich die XAML-Datei nicht anfasse. :)


Ich persönlich bin ein sehr großer Fan von DevExpress. Beste MVVM Unterstützung die ich je am Markt gefunden habe. Zudem wird das default MVVM von MS noch erweitert. (E.g. keine PropertyChanged Invoke mehr nötig, CanExecute wird automatisch gebunden, besseres IntelliSense im XAML, Converter per Mausklick,... Die Liste ist lang).

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

10

12.06.2016, 17:31

Ähhh, wenn ich das richtig verstehe, dann muss ich da aber ziemlich viel Geld bezahlen um damit entwickeln zu dürfen!? Gibt es nur eine IDE von denen oder kann man auch nur die Bibliotheken bekommen?

Zum Designer: Gibt es ein Flag was vom Designer gesetzt wird, sodass ich das im Programm überprüfen kann. (Ähnlich dem Debugflag) Ich würde nämlich nicht ganz so gerne den Designer komplett ausstellen - nur für mein Projekt wär das in Ordnung. Ansonsten wär die Idee, dass ich auf dieses Designerflag prüfe und nur wenn es nicht gesetzt ist den Code für das Fenstererstellen ausführe. Gibts da was passendes?
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

Werbeanzeige