Laden...

XAML - Grid mit Columns -> wie greife ich auf Elemente in der ...xaml.cs zu ?

Erstellt von EmilDev vor einem Jahr Letzter Beitrag vor einem Jahr 544 Views
E
EmilDev Themenstarter:in
14 Beiträge seit 2021
vor einem Jahr
XAML - Grid mit Columns -> wie greife ich auf Elemente in der ...xaml.cs zu ?

Hallo zusammen,

ich habe in einer Benutzeroberfläche mittels XAML ein(e?) Grid mit zwei Spalten definiert.

So sieht der Anfang der Definition in XAML aus:

 <Grid>
                   <Grid.ColumnDefinitions>
                       <ColumnDefinition Width="41*"/>
                       <ColumnDefinition Width="778*"/>
                   </Grid.ColumnDefinitions>

Für eine Textauswahlbox (ListBox) habe ich nun im zugehörigen ...xaml.cs File den entsprechenden C# Code:

                ADUserSuggestionsListBox = new ListBox();
                ADUserSuggestionsListBox.HorizontalAlignment = SuggestionTextBox.HorizontalAlignment;
                ADUserSuggestionsListBox.VerticalAlignment = SuggestionTextBox.VerticalAlignment;
                ADUserSuggestionsListBox.Margin = new Thickness(SuggestionTextBox.Margin.Left + 1, SuggestionTextBox.Margin.Top + SuggestionTextBox.Height, 0, 0);
                ADUserSuggestionsListBox.Width = SuggestionTextBox.Width;
                ADUserSuggestionsListBox.BorderBrush = Brushes.Black;
                ADUserSuggestionsListBox.Visibility = Visibility.Hidden;
                ListBoxItem listBoxItem = new ListBoxItem();
                listBoxItem.Content = string.Empty;
                ADUserSuggestionsListBox.Items.Add(listBoxItem);
                var grid = SuggestionTextBox.Parent as Grid;
                grid.Children.Add(ADUserSuggestionsListBox);

Die ListBox ADUserSuggestionsListBox wird allerdings nicht angezeigt. Die Funktion dahinter ist allerdings vorhanden. Es läuft hier eine Type-Ahead-Suche auf das ActiveDirectory nach dem Usernamen. Ich kann ein paar Zeichen eingeben, dann blind z.B. ein paarmal CursorDown drücken, dann Enter, und dann wird korrekt ein Wert aus der Listenauswahl eingefügt. Aber das Listenauswahlfenster selbst ist unsichtbar.

Ich vermute, ich muss der ListBox noch irgendwie mitteilen, in welche Spalte des Grids ich sie haben will - kann das sein? Leider finde ich keine entsprechende Property/Methode, so etwas wie "GridColumn" oder so (in XAML heisst es denke ich Grid.Column)

Könnt Ihr mir bitte sagen, wie ich die ListBox sichtbar bekomme?

Dieselbe Funktion klappt einwandfrei in einem anderen Tab, das aber eine Grid OHNE Spalten verwendet, hier wird die Auswahlbox einwandfrei angezeigt...

Vielen Dank und schöne Grüße

Emanuel

187 Beiträge seit 2009
vor einem Jahr

Zitat von EmilDev

ADUserSuggestionsListBox.Visibility = Visibility.Hidden;

Das müsste dann wahrscheinlich Visibility.Visible sein.

Ansonsten könnte man auch für die Controls im Xaml Namen vergeben.

190 Beiträge seit 2012
vor einem Jahr

Hallo.

Schau dir unbedingt diesen Artikel an: [Artikel] MVVM und DataBinding | myCSharp.de ! WPF und MVVM gehören zusammen.

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

E
EmilDev Themenstarter:in
14 Beiträge seit 2021
vor einem Jahr

Danke! Verstehe, das war irreführend. Die Visibility wird an späterer Stelle auf Visible gesetzt... Das ist es leider nicht.

E
EmilDev Themenstarter:in
14 Beiträge seit 2021
vor einem Jahr

Hallo Wilfried,

danke für den Hinweis auf den Artikel.

Ich habe hier ein großes Projekt übernommen, als C# Neuling.

Darin wird mit DataBinding gearbeitet - für jedes Tab existiert ein eigenes ViewModel.

Lediglich die angesprochene Sonderfunktion, eine Type-Ahead-Suche nach einem ActiveDirectory User anzubieten ist direkt im ...xaml.cs implementiert.

Wie gesagt, sie funktioniert nur an den Stellen nicht, wo die Felder in einem Grid platziert sind, dass mehrspaltig angelegt ist.

In anderen Tabs, wo es nicht mehrere Columns pro Grid gibt, wird die ListBox einwandfrei angezeigt.

Ich bräuchte denke ich die Info, wie man in C# die Eigenschaft anspricht, die im XAML "Grid.Column" heisst.

Danke und schöne Grüße

Emanuel

190 Beiträge seit 2012
vor einem Jahr

Ich kann nicht nachvollziehen, warum das ganze so gemacht wird. Gibt es da einen Grund? Was heißt "funktioniert nicht".

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

4.942 Beiträge seit 2008
vor einem Jahr

Hallo,

dafür gibt es die statischen Methoden Grid.SetRow / Grid.SetColumn oder alternativ DependencyObject.SetValue:

Grid.SetRow(subcontrol, row);
Grid.SetColumn(subcontrol, column);

// oder

subcontrol.SetValue(Grid.RowProperty, row);
subcontrol.SetValue(Grid.ColumnProperty, column);