Я только что заметил странную вещь и надеялся, что кто-нибудь сможет помочь мне разгадать эту загадку.
Я использую TeamvViewer для подключения к своим рабочим машинам и устранения проблем с приложением WPF, которое я написал. В наших системах обычно установлено несколько языков ввода с клавиатуры. Я заметил, что если выбранный язык ввода на моем локальном компьютере отличается от языка на удаленном компьютере, и я ввожу любой текст, то на удаленном компьютере будет введен текст в любой элемент управления с фокусом, НО ... событие клавиатуры этого элемента управления не будет срабатывать (PreviewKeyDown, KeyDown, PreviewKeyUp, KeyUp).
Это легко продемонстрировать с помощью следующего кода WPF, который запускается через TeamViewer. Кто-нибудь знает, почему это происходит?
XAML:
<Window x:Class="TestWpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
PreviewKeyDown="MainWindow_OnPreviewKeyDown"
KeyDown="MainWindow_OnKeyDown"
PreviewKeyUp="MainWindow_OnPreviewKeyUp"
KeyUp="MainWindow_OnKeyUp"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TextBlock
x:Name="PreviewKeyDownLog"
/>
<TextBlock
x:Name="KeyDownLog"
/>
<TextBlock
x:Name="PreviewKeyUpLog"
/>
<TextBlock
x:Name="KeyUpLog"
/>
<TextBox/>
</StackPanel>
</Window>
XAML код позади:
using System;
using System.Printing;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Speedocs.Helpers;
namespace TestWpfApplication
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void MainWindow_OnKeyUp(object sender, KeyEventArgs e)
{
KeyUpLog.Text = "Key up " + Guid.NewGuid();
}
private void MainWindow_OnPreviewKeyDown(object sender, KeyEventArgs e)
{
PreviewKeyDownLog.Text = "Preview key down " + Guid.NewGuid();
}
private void MainWindow_OnKeyDown(object sender, KeyEventArgs e)
{
KeyDownLog.Text = "Key down " + Guid.NewGuid();
}
private void MainWindow_OnPreviewKeyUp(object sender, KeyEventArgs e)
{
PreviewKeyUpLog.Text = "Preview key up " + Guid.NewGuid();
}
}
}