2009-07-27 8 views
2

ich dort eine Möglichkeit zu wissen, welches Element hat den Schwerpunkt in und WPF-Anwendung? Gibt es eine Möglichkeit, alle Ereignisse und Methodenaufrufe in wpf zu überwachen?Gibt es eine Möglichkeit zu wissen, welches Element in einer WPF-Anwendung den Fokus hat?

+0

Hat die Lösung überhaupt für Sie arbeiten? – Carlo

+0

Eigentlich habe ich UISpy verwendet, das den Fokus von Artikeln verfolgt –

+0

Ich verwendete ähnliches Tool - Inspizieren (C: \ Programme (x86) \ Windows Kits \ 10 \ bin \ 10.0.16299.0 \ x64 \ inspect.exe). –

Antwort

1

ok Die auf dieser Seite, die Sie Ich werde eine Lösung finden, aber es ist ein bisschen eklig, wenn Sie mich fragen: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a420dc50-b238-4d2e-9209-dfbd98c7a060

Es verwendet den VisualTreeHelper, um eine große Liste aller Steuerelemente zu erstellen, und fragt sie dann, ob sie den Fokus haben, indem sie auf die IsFocused-Eigenschaft schauen.

Ich würde denken, dass es einen besseren Weg gibt, es zu tun. Vielleicht eine Suche nach Active Control oder Focussed Kontrolle in Kombination mit WPF.

EDIT: Dieses Thema könnte nützlich sein How to programmatically navigate WPF UI element tab stops?

5
FocusManager.GetFocusedElement(this); // where this is Window1 

Hier ist eine vollständige Probe (wenn die App läuft, ein Textfeld konzentrieren und drücken Sie die Eingabetaste)

XAML:

<Window x:Class="StackOverflowTests.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" KeyDown="window1_KeyDown" 
    Title="Window1" x:Name="window1" Height="300" Width="300"> 
    <StackPanel> 
     <TextBox x:Name="textBox1" /> 
     <TextBox x:Name="textBox2" /> 
     <TextBox x:Name="textBox3" /> 
     <TextBox x:Name="textBox4" /> 
     <TextBox x:Name="textBox5" /> 
    </StackPanel> 
</Window> 

C#

using System.Windows; 
using System.Windows.Input; 

namespace StackOverflowTests 
{ 
    /// <summary> 
    /// Interaction logic for Window1.xaml 
    /// </summary> 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
     } 

     private void window1_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
     { 
      if(e.Key == Key.Return) 
       MessageBox.Show((FocusManager.GetFocusedElement(this) as FrameworkElement).Name); 
     } 
    } 
} 
+0

I gibt null zurück, wenn das fokussierte Element ein Fenster ist. –

Verwandte Themen