2009-04-30 19 views
1

Dank einer Antwort auf eine vorherige Frage (Previous Question) habe ich jetzt einen Code-Code, der WPF-Tabstopps navigiert (siehe unten). Es funktioniert gut, bis auf den ersten Tabstopp. Der Aufruf von this.MoveFocus (... First) und gefolgt von FocusManager.GetFocusedElement gibt null zurück. Irgendwelche Ideen? Wie bekomme ich den ersten Tabstopp in meinem Fenster?Wo finde ich den ersten WPF-Tabstopp?

Danke, - Mike

// Select the first element in the window 
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.First)); 

TraversalRequest next = new TraversalRequest(FocusNavigationDirection.Next); 
List<IInputElement> elements = new List<IInputElement>(); 

// Get the current element. 
UIElement currentElement = FocusManager.GetFocusedElement(this) as UIElement; 
while (currentElement != null) 
{ 
    elements.Add(currentElement); 

    // Get the next element. 
    currentElement.MoveFocus(next); 
    currentElement = FocusManager.GetFocusedElement(this) as UIElement; 

    // If we looped (If that is possible), exit. 
    if (elements[0] == currentElement) 
     break; 
} 

Antwort

1

Ich brauchte etwas ähnliches in einem Projekt zu tun, auf ich arbeite, und ich fand etwas, das gut zu funktionieren scheint.

Hier ist ein schnelles Demo-Projekt mit dem Code:

XAML:

<Window x:Class="WpfApplication3.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication3" 
     Title="MainWindow" SizeToContent="WidthAndHeight"> 

    <StackPanel> 
     <TextBox Width="200" /> 
     <TextBox Width="200" /> 
     <TextBox Width="200" /> 
    </StackPanel> 
</Window> 

-Code Behind:

using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Input; 

namespace WpfApplication3 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      this.InitializeComponent(); 

      // Code needs window to be active to work, so just call it in Loaded event for demo 
      this.Loaded += (s, e) => 
      { 
       FocusManager.SetFocusedElement(this, this); 
       UIElement element = FocusManager.GetFocusedElement(this) as UIElement; 
       element.MoveFocus(new TraversalRequest(FocusNavigationDirection.First)); 
      }; 
     } 
    } 
} 

Ich weiß, dass dies wirklich späte Antwort, aber funktioniert diese Hilfe Ihnen bei alle?