Announcement

Collapse
No announcement yet.

[WPF]Tastaturfokus Custom Control und andere Schwirigkeiten

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [WPF]Tastaturfokus Custom Control und andere Schwirigkeiten

    Hallo Community,
    ich habe ein 2 kleine Probleme mit einem User-Control und dem Tastaturfokus.

    Ich habe ein Hauptprogramm in dem ich ein Grid habe. In dieses Grid lade ich dann ein Usercontrol zur Laufzeit ein. Dieses UserControl stellt mein Menü dar.
    Das ganze mache ich über folgenden Code im Loaded ereigniss meinem Hauptprogramm:

    Code:
     TVControls.MenueDisplay Menue = new TVControls.MenueDisplay(ref MainGrid, DisplayList);
                Menue.Height = MainGrid.Height;
                Menue.Width = MainGrid.Width;
                Grid.SetRow(Menue, 2);
                MainGrid.Children.Add(Menue);
                FocusManager.SetIsFocusScope(Menue, true);
                FocusManager.SetFocusedElement(Menue, Menue);
    In meinem User Control habe ich 1 Kreis der in 4 Tortenstücke aufgeteilt ist. Jedes dieser Tortenstücke soll ein Menüeintrag representieren. Jetzt möchte ich natürlich das ich beim Laden gleich das Tortenstück1 als ausgewählt also auf Focus setze.


    Und hier habe ich schon mein erstes Problem:
    Da es sich um ein UserControl Handelt kann ich nur den Focus auf das Komplette Control legen und nicht auf ein Item innerhalb des Controls.
    Mittels:
    Code:
      FocusManager.SetIsFocusScope(Menue, true);
                FocusManager.SetFocusedElement(Menue, Menue);
    bin ich wenigstens schonmal soweit gekommen das ich den Focus von meinem MainProgramm auf mein Menue legen konnte. Doch leider liegt der focus dann bei Pfeiltaste rechts auf dem 2 Kuchenstück und nicht mehr auf dem ersten.

    Gehe ich über ein TAB habe ich das erste Kuchenstück im Focus und Animation und Focus bis 2 funktionieren.

    Mein 2.Problem beläuft sich innerhalb des uiserControls ab.
    Ich möchte wenn Tortenstück1 auf Focus ist das KeyDown Event überprüft ob Pfeiltaste Rechts oder Links gedrückt wurde, um ein Storyboard auszuführen.
    Das Storyboard wechselt dann Optisch von Kuchenstück1 zu Kuchenstück2.
    Danach soll der Focus auch auf Kuchenstück 2 liegen.

    mein Code ist wie folgt:

    Code:
           private void Teil1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.Key == Key.Right)
                {
                    var Control = Resources["FirstRight"] as Storyboard;
                    Control.Begin();
                    
                    Keyboard.Focus(Teil2);
                   
                }
                else if (e.Key == Key.Left)
                {
                    var Control = Resources["FourthLeft"] as Storyboard;
                    Control.Begin();
                
                    Keyboard.Focus(Teil4);
                }
            }
    
            private void Teil2_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.Key == Key.Right)
                {
                    var Control = Resources["SecondRight"] as Storyboard;
                    Control.Begin();
    
                    FocusManager.SetIsFocusScope(MainGrid, true);
                    FocusManager.SetFocusedElement(MainGrid, Teil3);
    
                }
                else if (e.Key == Key.Left)
                {
                    var Control = Resources["SecondLeft"] as Storyboard;
                    Control.Begin();
                  
                    Keyboard.Focus(Teil1);
                }
            }
            
            private void Teil3_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.Key == Key.Right)
                {
                    var Control = Resources["ThirdRight"] as Storyboard;
                    Control.Begin();
                   
                    Keyboard.Focus(Teil4);
                }
                else if (e.Key == Key.Left)
                {
                    var Control = Resources["ThirdLeft"] as Storyboard;
                    Control.Begin();
                  
                    Keyboard.Focus(Teil2);
                }
            }
    So wenn ich beim Kuchenstück1 anfange klappt alles wunderbar. Er führt die Animation aus und setzt den Focus auf Kuchenstück2. Wenn ich dann wieder Pfeiltasterechts drücke springt er auch in Teil2_KeyDown und führt die zweite Animation aus und setzt den Focus auf Kuchenstück 3.


    Und jetzt tritt das Problem auf:
    Kuchenstück3 bekommt zwar kurz den Focus, doch dieser springt wieder zurück zu Kuchenstück2. Das verstehe ich überhaupt nicht wieso bei Kuchestück1 zu 2 alles funktioniert aber bei 2 zu 3 er wieder zurückspringt nachdem 3 denn Fokus bekommen hat.

    Ich habe mal das User Control und das Main Programm als Anhang drangehängt. Über Hilfe wäre ich sehr dankbar.
    Attached Files

  • #2
    Hallo,

    wegen Crosspost ==> geschlossen

    Siehe WPF Tastatur-Focus


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment

    Working...
    X