Laden...

[erledigt] Binding in C# Code

Erstellt von flacker vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.600 Views
F
flacker Themenstarter:in
33 Beiträge seit 2014
vor 9 Jahren
[erledigt] Binding in C# Code

Hallo,

folgendes Problem:

Ich habe eine Klasse erstellt welche von der Canvas-Klasse erbt. Diese Klasse füge ich dann meiner Gui hinzu. Da ich die Width/Height Property nicht gesetzt habe, ist width = NaN. Soweit klappt alles.

Damit die Width/Height Property nun nicht NaN ist, wollte ich gern die Fensterbreite an die geerbet Weite der Klasse übergeben. Dies sieht im moment so aus :

            Binding b = new Binding();
            b.ElementName = window.Name;
            b.Path = new PropertyPath("Width");
            SetBinding(Canvas.WidthProperty, b);

Anmerkung: Das Binding findet in der Klasse statt welche von der Canvas-Klasse erbt.

Möchte ich nun auf die geerbte Weite zugreifen, ist immer noch NaN enthalten.

Woran liegt dies? Habe ich ein Fehler beim binden gemacht welche ich nicht sehe? Komme leider nicht weiter... sollte ich eine Sache gepostet habe, welche schon mehrmals gefragt wurde, dann würde ich mich über den entsprechenden Link freuen.

P
660 Beiträge seit 2008
vor 9 Jahren

Morgen,

wo wird denn dein Code ausgeführt? Im Constructor (deiner Form)?
Wenn ja dann versuch es mal im Loaded-Ereignis.

Oder versuche mal dich an die ActualWidth-Eigenschaft der Form zu binden.

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

F
flacker Themenstarter:in
33 Beiträge seit 2014
vor 9 Jahren

Morgen,

herzlichen dank, dies funktioniert. An die ActualWidth Eigenschaft kann man nicht binden!

Jetzt habe ich aber etwas beobachtet. Ziehe ich das Fenster am Rand größer, wird das Canvas ebenfalls vergrößert. Drücke ich jedoch auf den Maximieren Button rechts oben, bleibt das Canvas auf der aktuellen Größe welche es vor dem Maximieren hatte.

Müsste sich das Canvas nicht durch das Binding auch beim Maximieren anpassen?

P
660 Beiträge seit 2008
vor 9 Jahren

Ok, sorry, hätte etwas mehr schreiben können.
ActualWidth und ActualHight sind ReadOnly DPs, somit ist ein Binding nicht möglich.
Das kann man aber mit AttachedProperties umgehen.

siehe pushing-read-only-gui-properties-back-into-viewmodel

Zu deiner anderen Frage, kann ich dir leider nichts sagen.

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

F
flacker Themenstarter:in
33 Beiträge seit 2014
vor 9 Jahren

Sehr interessant. Mein Binding funktioniert aber nun mit Width/Height.

Danke für die Hilfe.

Für das Maximierungsproblem, kann mir bestimmt jemand anderes noch nen Tipp geben.

1.378 Beiträge seit 2006
vor 9 Jahren

Hallo flacker,

vielleicht erklärst du noch ein wenig, was du eigentlich vor hast. Wieso willst du, dass Width & Height gesetzt ist, wenn du dann eh nur die Breite und Höhe des Parents übernimmst?

Du kannst auf jeden Fall immer die aktuelle Breite und Höhe mit den Properties ActualWidth und ActualHeight auslesen. Das Setzen der eigentlichen Breite und Höhe sollte man eigentlich vermeiden und mit LayoutContainern arbeiten außer es gibt spezielle Gründe dafür.

Lg, XXX

PS: ActualWidth und ActualHeight werden auch beim Maximieren gesetzt.

F
flacker Themenstarter:in
33 Beiträge seit 2014
vor 9 Jahren

Problem hat sich gelöst. Kann geschloßen werden. Und danke für alle Antworten

Hinweis von gfoidl vor 9 Jahren

Threads werden i.d.R. nicht geschlossen wenn sie den Regeln entsprechen. Um einen Thread als "erledigt" o.ä. zu markieren kann der Titel editiert werden. Siehe hierzu auch [Hinweis] Wie poste ich richtig? im PS.