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
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.
Hallo.
Schau dir unbedingt diesen Artikel an: [Artikel] MVVM und DataBinding | myCSharp.de ! WPF und MVVM gehören zusammen.
Danke! Verstehe, das war irreführend. Die Visibility wird an späterer Stelle auf Visible gesetzt... Das ist es leider nicht.
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
Ich kann nicht nachvollziehen, warum das ganze so gemacht wird. Gibt es da einen Grund? Was heißt "funktioniert nicht".
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);