none
ListBox DataTemplate mit Button / ComboBox selektiert nicht die aktuelle Zeile... RRS feed

  • Frage

  • Hallo,

    ich habe ein kleines Problem mit einem DataTemplate, welches ich für eine ListBox verwende. Dieses enthält u.a. einen Button und einen ComboBox (und auch noch Labels).
    Hier mein Problem:
    Ist z.B. aktuell das 1.Element selektiert und der Bediener drückt auf den Button des 3.Elementes, so wird zwar der Button gedrückt, aber das dritte Element wird nicht selektiert. Nur wenn ich auf den Label drücke, wird auch das Element selektiert... wie kann man den Eintrag selektieren, wenn der Button gedrückt wurde, oder wenn die ComboBox aufgemacht wurde?
    Jochen Kalmbach (MVP VC++)
    Freitag, 16. Oktober 2009 09:47

Antworten

  • Hi,

    also erstmal braucht die Combobox einen Namen. Dann suchst du im gefeuerten Click event des Buttons nach der Combobox die zum Item gehört und legst den Focus darauf. Hat zumindest gut funktioniert. > Du musst die base des Events casten und und dann nochmal das control suchen! Kann dir auch den Snippet geben wenn du willst...!?
    Freitag, 23. Oktober 2009 09:42
  • Wieso einfacher? Das sind 3 zeilen code die für jedes Item der ListBox gelten. Wenn du den Button richtig aus dem Event herraus castest dann ist da nichts spezifisch... Ansonsten könnte man ja noch den selectionchanged Event nutzen und das jeweilig gerade ausgewählte ITEM highlighten.

    "Das gleiche Problem hab ich übrigens auch mit DataTemplates in der ListBox, wo im DataTemplate nur ein Icon/Label drin ist... sobald ich neben den Label klicke, wird die Zeile nicht markiert! ich muss immer genau *auf* den text klicken! Das kann ja wohl nicht sein, oder?"

    Naja das ist ja wahrscheinlich schon so gewollt, weil es können theretisch ja mehrere Focusierbare Controls im Item stecken. Du kannst z.B. einen Event für das Icon erstellen - in dem musst du dann den Focus an das entsprechende Item der Listbox weiterleiten. Oder SelectionChanged Event.

    Man kann natürlich auch einen DataTrigger im XAML verwenden. Ich bin da jetzt auch nicht so informiert weil ich eigentlich kein WPF mache aber müsste es nicht eine standart einstellung geben für Item Highlight oder so? Kann natürlich dann auch sein das man diese standarteinstellung mit dem DataTemplate "auser" Funktion setzt....
    Freitag, 23. Oktober 2009 12:22

Alle Antworten

  • Hier ist noch ein kleines Beispiel-Projekt, was das Problem veranschaulicht:
    http://blog.kalmbachnet.de/file/WPF_ListBox1.zip
    Jochen Kalmbach (MVP VC++)
    Freitag, 16. Oktober 2009 11:30
  • Hi,

    also erstmal braucht die Combobox einen Namen. Dann suchst du im gefeuerten Click event des Buttons nach der Combobox die zum Item gehört und legst den Focus darauf. Hat zumindest gut funktioniert. > Du musst die base des Events casten und und dann nochmal das control suchen! Kann dir auch den Snippet geben wenn du willst...!?
    Freitag, 23. Oktober 2009 09:42
  • Ja, so ähnlich hab ich es auch gemacht... aber ich hatte gehofft, dass es irgendwie einfach (und nicht "Button-Spezifisch") lösbar ist... aber qusi: Gebe den Event einfach weiter....


    Das gleiche Problem hab ich übrigens auch mit DataTemplates in der ListBox, wo im DataTemplate nur ein Icon/Label drin ist... sobald ich neben den Label klicke, wird die Zeile nicht markiert! ich muss immer genau *auf* den text klicken! Das kann ja wohl nicht sein, oder?
    Jochen Kalmbach (MVP VC++)
    Freitag, 23. Oktober 2009 11:33
  • Wieso einfacher? Das sind 3 zeilen code die für jedes Item der ListBox gelten. Wenn du den Button richtig aus dem Event herraus castest dann ist da nichts spezifisch... Ansonsten könnte man ja noch den selectionchanged Event nutzen und das jeweilig gerade ausgewählte ITEM highlighten.

    "Das gleiche Problem hab ich übrigens auch mit DataTemplates in der ListBox, wo im DataTemplate nur ein Icon/Label drin ist... sobald ich neben den Label klicke, wird die Zeile nicht markiert! ich muss immer genau *auf* den text klicken! Das kann ja wohl nicht sein, oder?"

    Naja das ist ja wahrscheinlich schon so gewollt, weil es können theretisch ja mehrere Focusierbare Controls im Item stecken. Du kannst z.B. einen Event für das Icon erstellen - in dem musst du dann den Focus an das entsprechende Item der Listbox weiterleiten. Oder SelectionChanged Event.

    Man kann natürlich auch einen DataTrigger im XAML verwenden. Ich bin da jetzt auch nicht so informiert weil ich eigentlich kein WPF mache aber müsste es nicht eine standart einstellung geben für Item Highlight oder so? Kann natürlich dann auch sein das man diese standarteinstellung mit dem DataTemplate "auser" Funktion setzt....
    Freitag, 23. Oktober 2009 12:22
  • Hi,

    also erstmal braucht die Combobox einen Namen. Dann suchst du im gefeuerten Click event des Buttons nach der Combobox die zum Item gehört und legst den Focus darauf. Hat zumindest gut funktioniert. > Du musst die base des Events casten und und dann nochmal das control suchen! Kann dir auch den Snippet geben wenn du willst...!? 

    Hallo,

    ich hätte Interesse an dem Snippet.

    Sonntag, 20. Februar 2011 16:28