Laden...

TextBlocks oder andere Dinge über String/Variable ansprechen

Erstellt von Butzi74 vor einem Jahr Letzter Beitrag vor einem Jahr 268 Views
B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr
TextBlocks oder andere Dinge über String/Variable ansprechen

Hallo zusammen.

Ich kämpfe mal wieder, als blutiger Anfänger, mit etwas herum und fand bisher echt nichts im Internet was mir half. Vielleicht sehe ich das Ganze viel zu falsch und es steckt wirklich viel mehr Arbeit dahinter:-(

Ich habe eine Seite (Page) bei dem es mehrere TextBlöcke gibt. Diese enthalten jeweils eine Prozessbar sowie ein Image. Die TextBlöcke, sowie die Prozessbar und das Image, haben jeweils einen Namen (x:Name=""). Die Namen der TextBlöcke heissen z.B. "DesktopBlock", "DokumenteBlock", "DownloadsBlock" usw. Die Prozessbar heissen "DesktopPG", "DokumentePG", "DownloadsPG" usw. Genauso die Images "DesktopIMG", "DokumenteIMG" usw.

Dann habe ich mir eine Klasse erstellte, die sich "Tools" nennt. Dort habe ich alle Funktionen wie z.b. Kopieren von Ordner usw. reingehauen. Die Kopierfunktion rufe ich dann z:b. über "Tools.Kopier(Quelle, Ziel);" auf. Geht alles.

Nun möchte ich eine weitere Funktion reinpacken, mit dem ich jeweils die Blöcke sowie Prozessbar oder auch Image ein und ausblenden kann.
Dies möchte ich durch z.b. "Tools.Info(Ordner,Zustand);" einblenden oder ausblenden. Sprich, gebe ich den Wert "Desktop" als ORDNER an, wird dieser als String weitergegeben und soll dann der TextBlock "DesktopBlock" angesprochen werden und eingeblendet werden. Mit ON oder OFF spreche ich über den String "Zustand" (On oder Off) dann die Prozessbar "DesktopPG" und "DesktopING" jeweils an.
Die ON oder OFF würde ich mit je einer IF Abfrage dann lösen.

Einen TextBlock blende ich ja mit "TextBlockname.Visibility = Visibility.Hidden;" aus. Korrekt?
Aber wie bekomme ich den String als TextBlocknamen z.b. hin? oder auch als Prozessbarnamen /Imagenamen?:-(
Zuerst erstelle ich neue Variablen wie "var Block = Ordner +"Block" oder "var PG = Ordner + "PG". Würde ja dann "DesktopBlock" ergeben.
Dann müsste es (mal bildlich gesehen) nur noch heissen "Block.Visibility = Visibility.Hidden". Aber VisualStudio kennt natürlich keinen TextBlock mit dem Namen BLOCK.

Hoffe ich konnte nun alles verständlich erklären was mein Problem ist oder wie ich es habe?🙂

PS: Ich verwende WPF und kein WindowsForm!

16.807 Beiträge seit 2008
vor einem Jahr

Da man in WPF mit Datenbindung arbeiten sollte, und mit nichts anderem, sind die Namen der Controls (x:Name) i.d.R. irrelevant.
Auch greift man von logischem Code nicht auf die Controls zu.

Deswegen gibt es den MVVM Pattern. Verwendet man diesen nicht, wird man von Workaround über Workaround stolpern.
[Artikel] MVVM und DataBinding

Über ein ViewModel und dessen Eigenschaften kannst Du dann auch dynamisch in XAML reagieren und Dinge ein/ausblenden.
Aber nicht umgekehrt.

B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Danke für die schnelle Antwort🙂 Muss ich mir , wenn ich mehr Zeit und Ruhe habe, dann mal anschauen.

Aber wenn ich das nun auf den schnelle Blick richtig verstehe/sehe, dann verpasse ich z.b. dem TextBlock keinen festen Namen mit <TextBlock X:Name="DesktopBlock" ..> sondern mit <TextBlock IsEnabled="{Binding DesktopBlock}" /> und dann eben den entsprechenden C-Code wo ich zuvor (Beispiel Desktop) aus ORDNER+"Block" mir den String "DesktopBlock" zusammenbaue?

16.807 Beiträge seit 2008
vor einem Jahr

So ungefähr.

B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Also ich bekomme ich es immer noch nicht hin. Muss aber das Tool nun fertig bekommen und lasse es vorerst mal mit dem manuellem Ausblenden der jeweiligen TextBlöcke. Wenn ich wieder Luft habe, setze ich mich da erneut dran und versuche nochmal mein Glück. Wenn es klappt gibt es eine Version 2 quasi von meinem Tool🙂