Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
http://m.c-plusplus.net

  
C++ Forum :: C# und .NET ::  Ansprechen von XAML-Elementen  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
AngelaMerkel
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.09.2011
Beiträge: 55
Beitrag AngelaMerkel Mitglied 16:01:39 19.02.2012   Titel:   Ansprechen von XAML-Elementen            Zitieren

Ich möchte mehrere Textfelder mittels einer Schleife ansprechen. Kann man den Elementen irgendwie ein Array als Name zuordnen, also

Name="feld[1]", Name="feld[2]",...

oder kann man das irgendwie anders realisieren - vielleicht ähnlich wie bei delegate für Methoden?
Es wäre ja langatmig, wenn ich für jedes Element eine eigene Codezeile schreiben müsste:

feld_1.Text=""; feld_2.Text=""...
µ
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.06.2001
Beiträge: 2144
Beitrag µ Mitglied 16:06:15 19.02.2012   Titel:              Zitieren

Die Controls-Collection einer Form verfügt über einen string-Indexer:

TextBox tb = Controls["textBox2"] as TextBox;
tb.Text = "huhu";


Mit dem Name-Property der Controls kannst Du sie also ansprechen.
In der Schleife setzt du Die Namen also einfach mit string.Format zusammen.

Es steht Dir frei, die Controls (bzw. ihre Referenzen) in eine andere Datenstruktur zu packen. Vom einfachen Array bis zu einem Dictionary, je nachdem was benötigt wird.


Zuletzt bearbeitet von µ am 16:06:56 19.02.2012, insgesamt 1-mal bearbeitet
µ
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.06.2001
Beiträge: 2144
Beitrag µ Mitglied 16:37:41 19.02.2012   Titel:              Zitieren

Jetzt habe ich auch mal den Titel gelesen: XAML-Elemente.

Sorry, obige Antwort bezieht sich auf Winforms. Für WPF bin ich zu doof.
Firefighter
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.03.2007
Beiträge: 2990
Beitrag Firefighter Mitglied 00:28:30 20.02.2012   Titel:              Zitieren

AngelaMerkel schrieb:
Ich möchte mehrere Textfelder mittels einer Schleife ansprechen. Kann man den Elementen irgendwie ein Array als Name zuordnen, also

Name="feld[1]", Name="feld[2]",...

oder kann man das irgendwie anders realisieren - vielleicht ähnlich wie bei delegate für Methoden?
Es wäre ja langatmig, wenn ich für jedes Element eine eigene Codezeile schreiben müsste:

feld_1.Text=""; feld_2.Text=""...

Was machst du da? Das klingt alles nach einem verhunzten Design.
Wenn du deine Schleife bauen willst benutz doch einfach die Controls-Collection und iteriere diese.

_________________
Clean-Code-Developer
Wie man richtig Fragen stellt
AngelaMerkel
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.09.2011
Beiträge: 55
Beitrag AngelaMerkel Mitglied 16:36:54 20.02.2012   Titel:              Zitieren

Firefighter schrieb:

Was machst du da? Das klingt alles nach einem verhunzten Design.
Wenn du deine Schleife bauen willst benutz doch einfach die Controls-Collection und iteriere diese.


Ich habe meine Grafikelemente mit XAML eingefügt. Dann müsste ich ja manuell erst einmal eine ControlCollection erstellen, und ich dachte, das geht nur bei WinForms.
Firefighter
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.03.2007
Beiträge: 2990
Beitrag Firefighter Mitglied 19:37:37 20.02.2012   Titel:              Zitieren

Also wenn du irgendwelche Controls in deinem XAML definierst, dann kannst du die Children oder Controls Colletion des darueber liegenden Containers abfragen, zum beispiel dein Grid oder je nach dem wo deine Controls drinne liegen.

_________________
Clean-Code-Developer
Wie man richtig Fragen stellt
loks
Unregistrierter




Beitrag loks Unregistrierter 20:24:33 20.02.2012   Titel:              Zitieren

Die interessantere Frage ist: Was möchtest Du machen? In WPF kann man Controls über Databindung mit daten verbinden.
AngelaMerkel
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.09.2011
Beiträge: 55
Beitrag AngelaMerkel Mitglied 17:34:48 21.02.2012   Titel:   Sinn der            Zitieren

Ich habe 3x3 TextBox-Elemente, denen ich bei einem Methodenaufruf jeweils einen zufälligen Wert zuweisen möchte.
Ich möchte diese 9 Elemente irgendwie über eine Schleife bearbeiten und abrufen können (möglichst zeilen- und spaltenweise), aber ich kann ja ein Element nicht mehreren Containern zuordnen...oder?

Grafische Anordnung der 9 Elemente:
1 2 3
4 5 6
7 8 9
kann ich da einen Container spalte_1 machen mit (1,4,7) sowie einen Container zeile_1 mit (1,2,3)?
EXDW
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.08.2005
Beiträge: 4732
Beitrag EXDW Mitglied 18:56:12 21.02.2012   Titel:              Zitieren

Implementiere es so das es dem Code Scheißegal ist wie die Items angezeigt werden.
Pack die Dinger einfach in eine Liste.

Pseudocode (hier im Forum getippt)
C#
C#:
public EnhancedObservableCollection<int> Values { get; set; }
Values.AddRange(new[] { 1,2,3,4,5,6,7,8,9 });


Xaml
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<ItemsControl ItemsSource="{Binding Values}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="3" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemsTemplate>
        <DataTemplate>
            <Border BorderBrush="Pink" BorderThickness="1">
                <TextBlock Text="{Binding }" />
            </Border>
        </DataTemplate>
    </ItemsControl.ItemsTemplate>
</ItemsControl>


Dann kannst du am Ende einfach die Values Liste anpassen, die UI kümmert sich von ganz allein um den Rest.
AngelaMerkel
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.09.2011
Beiträge: 55
Beitrag AngelaMerkel Mitglied 19:18:44 21.02.2012   Titel:   Vielen Dank            Zitieren

Ich habs probiert und es klappt auch endlich. Auf diese Idee wäre ich nie gekommen, denn ich wollte ja alle Objekte erst eindeutig irgendwo in XAML erstellen
C++ Forum :: C# und .NET ::  Ansprechen von XAML-Elementen  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.