Problem mit Listbox hinter Tastatur
Hi,
ich habe schon relativ viel im Internet gesucht und wollte auch mal im Entwicklerforum von Microsoft nachfragen, aber vielleicht hat hier jemand eine schnelle Lösung.
Mein Problem ist, dass ich eine Listbox habe, die den kompletten Bildschirm füllt (bis auf eine Textbox ganz oben).
Je nachdem was der User eintippt, wird die Listbox befüllt. (So wie autocomplete)
Das Problem ist, dass wenn der User dann etwas eingibt, dass die untersten Elemente nicht angezeigt werden, weil sie hinter der Tastatur versteckt sind.
Ich habe bisher keine Lösung gefunden, die Größe der Listbox so zu beschränken, dass sie sich daran anpasst, ob die Tastatur offen ist oder nicht.
Hier mal ein einfacherer Beispielcode:
Code:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBox Grid.Row="0"/>
<ListBox Grid.Row="1"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" >
<ListBoxItem Content="Item1"/>
<ListBoxItem Content="Item2"/>
<ListBoxItem Content="Item3"/>
<ListBoxItem Content="Item4"/>
<ListBoxItem Content="Item5"/>
<ListBoxItem Content="Item6"/>
<ListBoxItem Content="Item7"/>
<ListBoxItem Content="Item8"/>
<ListBoxItem Content="Item9"/>
<ListBoxItem Content="Item10"/>
<ListBoxItem Content="Item11"/>
<ListBoxItem Content="Item12"/>
<ListBoxItem Content="Item13"/>
<ListBoxItem Content="Item14"/>
<ListBoxItem Content="Item15"/>
<ListBoxItem Content="Item16"/>
<ListBoxItem Content="Item17"/>
<ListBoxItem Content="Item18"/>
<ListBoxItem Content="Item19"/>
<ListBoxItem Content="Item20"/>
<ListBoxItem Content="Item21"/>
<ListBoxItem Content="Item22"/>
<ListBoxItem Content="Item23"/>
<ListBoxItem Content="Item24"/>
<ListBoxItem Content="Item25"/>
<ListBoxItem Content="Item26"/>
<ListBoxItem Content="Item27"/>
</ListBox>
</Grid>
Vielleicht hat ja schon mal einer von euch hierfür eine Lösung gefunden.
AW: Problem mit Listbox hinter Tastatur
Ich glaube es gibt bei einer Textbox die events Manipulation started und ended. Also würde ich sobald das zweite Event aufgerufen wird, die Tastatur "einzuschieben" oder wenn das erste event aufgerufen wird die grösse zu ändern.
Jedoch weiss ich nicht ob dies klappt, da ich noch nie mit diesen Events gearbeited habe
AW: Problem mit Listbox hinter Tastatur
Die Events sind dafür da um Interaktionen mit dem User zu melden. (Also antippen)
Diese werden soweit ich weiß nicht aufgerufen beim Tastaturgebraucht.
Aber das ist auch nicht wirklich das Problem. Theoretisch könnte man das mit dem Focus der Textbox ausfündig machen, ob die Tastatur offen ist oder nicht und dann die Höhe anpassen.
Aber ich hatte gehofft, dass es vielleicht einfach einen Layout-Trick gibt, mit dem man das hervorrufen kann.
Wenn man das hardcoded, müsste man noch so viel anderes checken. Erstmal natürlich, ob Softwaretastatur oder Hardwaretastatur (weiß gar nicht ob das geht), dann wie die Seite orientiert ist. (Landscape oder nicht)
Und schlussendlich wäre dann der Code auch nicht zukunftssicher, wenn man Phones mit größerer Auflösung rauskommen müsste man wieder irgendwelche Zahlen ändern.
Ich meine, die Listboxen werden ja alle automatisch auf die Größe der Seite beschränkt mit den richtigen properties, sodass sie auch beim drehen des Handys auf das Display begrenzt sind.
Ich hatte gehofft, dass es so etwas auch für die Tastatur geben könnte.
AW: Problem mit Listbox hinter Tastatur
Was passiert, wenn du (ich weiß, dass es unschön ist) dem letzten ListboxItem so ca 200 Margin/Padding nach unten gibst?
Dann müsste es ja irgendwann hinter der Tastatur hervorkommen.
AW: Problem mit Listbox hinter Tastatur
Hmm, das wäre eine Idee die ich ausprobieren könnte. Muss ich zwar ein bisschen unschön rum programmieren (da an ObservableCollection gebunden), aber das könnte tatsächlich funktionieren.
AW: Problem mit Listbox hinter Tastatur
So viel ist das doch gar nicht.
Ich würde einfach
Code:
((Object)ObservableCollection.Last()).Padding = new Thickness(0, 0, 0, 350);
an der richtigen Stelle einfügen.
AW: Problem mit Listbox hinter Tastatur
Das werde ich mal ausprobieren, aber ich glaube mit Mango wird das nicht mehr nötig sein.
Habe gestern das hier gefunden:
DeviceStatus Api:
http://msdn.microsoft.com/en-us/libr...(v=VS.92).aspx
Hat unter anderem entsprechende Events die einem sagen, wenn die Tastatur geöffnet wurde, sowie ein Propertie in dem der Status gespeichert ist.
Ich werde mal schauen, in wie fern sich beide Lösungen implementieren lassen und was die bessere ist.
PS: Hast du meine Email-Antwort erhalten?