将事件GotFocus分配给WPF-Aplication中的所有TextBox

Los*_*los 1 .net c# wpf error-handling controls

我想将GotFocus-Event添加到我的WPF-Aplication中的每个Textbox中,因为它适用于Touch Devices,每次使用TextBox时OSK都应该打开.我遇到了将事件添加到TextBoxes的过程的问题.应用程序已经构建了pc(我正在使用interhsip,我的目标是将这个应用程序带到Windows 8触摸设备).这是链接,我得到了我的灵感:添加/删除处理程序到文本框

这是我的解决方案:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    foreach (Control tb in this.Controls)
    {
        if (tb is TextBox)
        {
            TextBox tb1 = (TextBox)tb;
            tb1.GotFocus += TextBox_GotFocus;
        }
    }
}

private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
    KeyBoardManager.LaunchOnScreenKeyboard();
}
Run Code Online (Sandbox Code Playgroud)

当我想运行此代码时,我有以下错误:

错误1'OSK_Test.MainWindow'不包含'Controls'的定义,也没有扩展方法'Controls'接受类型'OSK_Test.MainWindow'的第一个参数(你是否缺少using指令或程序集引用?)

我有什么需要做的,它有效吗?当然,与LostFocus一样!

小智 8

您可以做得更好,将以下代码添加到app.xaml.cs:

protected override void OnStartup(StartupEventArgs e)
    {
        EventManager.RegisterClassHandler(typeof(TextBox),
            TextBox.GotKeyboardFocusEvent, new RoutedEventHandler(TextBox_GotFocus));

        base.OnStartup(e);
    }
Run Code Online (Sandbox Code Playgroud)