C# Tablet PC输入面板不会导致TextInput事件?
我有一个自定义控件,它使用WPF TextInput事件。这在使用键盘时效果很好;但是,如果使用“Tablet PC输入面板”(随Windows 7提供)的手写识别,则单击“插入”按钮时不会发生TextInput事件C# Tablet PC输入面板不会导致TextInput事件?,c#,wpf,textinput,C#,Wpf,Textinput,我有一个自定义控件,它使用WPF TextInput事件。这在使用键盘时效果很好;但是,如果使用“Tablet PC输入面板”(随Windows 7提供)的手写识别,则单击“插入”按钮时不会发生TextInput事件 public partial class Window1 : Window { public Window1() { } protected override void OnTextInput(TextCompositionEventArgs e)
public partial class Window1 : Window
{
public Window1()
{
}
protected override void OnTextInput(TextCompositionEventArgs e)
{
base.OnTextInput(e);
this.Title = e.Text;
}
}
class Text : Control
{
static Text()
{
KeyboardNavigation.IsTabStopProperty.OverrideMetadata(
typeof(Text), new FrameworkPropertyMetadata(true));
KeyboardNavigation.TabNavigationProperty.OverrideMetadata(
typeof(Text), new FrameworkPropertyMetadata(KeyboardNavigationMode.None));
FocusableProperty.OverrideMetadata(
typeof(Text), new FrameworkPropertyMetadata(true));
}
public static readonly DependencyProperty EnteredTextProperty =
DependencyProperty.Register("EnteredText", typeof(string), typeof(Text),
new FrameworkPropertyMetadata());
public string EnteredText {
get { return (string)GetValue(EnteredTextProperty); }
set { SetValue(EnteredTextProperty, value); }
}
protected override void OnTextInput(TextCompositionEventArgs e)
{
this.EnteredText = e.Text;
e.Handled = true;
}
/// <inheritdoc/>
protected override void OnMouseDown(MouseButtonEventArgs e)
{
base.OnMouseDown(e);
Focus();
}
}
公共部分类窗口1:窗口
{
公共窗口1()
{
}
受保护的覆盖无效输出(TextCompositionEventArgs e)
{
基本输出(e);
此.Title=e.文本;
}
}
类文本:控件
{
静态文本()
{
Keyboard Navigation.IsTabStopProperty.OverrideMetata(
typeof(文本),新的框架属性ymetadata(true));
KeyboardNavigation.TabNavigationProperty.OverrideMetata(
typeof(文本),新的FrameworkPropertyMetadata(KeyboardNavigationMode.None));
FocusableProperty.OverrideMetadata(
typeof(文本),新的框架属性ymetadata(true));
}
public static readonly dependencProperty EnteredTextProperty=
DependencyProperty.Register(“EnteredText”、typeof(字符串)、typeof(文本),
新的FrameworkPropertyMetadata());
公共字符串输入文本{
获取{return(string)GetValue(EnteredTextProperty);}
set{SetValue(EnteredTextProperty,value);}
}
受保护的覆盖无效输出(TextCompositionEventArgs e)
{
this.EnteredText=e.Text;
e、 已处理=正确;
}
///
MouseDown上的受保护覆盖无效(MouseButtonEventArgs e)
{
base.OnMouseDown(e);
焦点();
}
}
以下是XAML:
<Window x:Class="TestProject.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300"
>
<local:Text xmlns:local="clr-namespace:TestProject">
<Control.Template>
<ControlTemplate TargetType="local:Text">
<Border Background="Beige">
<Viewbox>
<TextBlock Text="{TemplateBinding EnteredText}"/>
</Viewbox>
</Border>
</ControlTemplate>
</Control.Template>
</local:Text>
</Window>
当应用程序启动时,文本输入将显示在标题栏中。这适用于键盘和手写识别。
一旦在窗口内单击以使控件具有焦点,则只有键盘可用于输入;手写识别被忽略
有人知道出了什么问题吗?为什么我在一种情况下得到TextInput事件,而在另一种情况下却得不到?
这是WPF中的错误吗?是否有解决方法?控件在插入后会丢失其焦点的属性,如果在MouseDown事件上调用focus(),则无法恢复这些属性(因为实际上它已聚焦,并且OnFocus事件不会再次释放) 如果将其他控件对焦,并将自定义控件再次对焦,则会发生TextInput事件(直到再次插入tablet pc输入的文本)
我无法解释发生了什么,我认为这可能是WPF的一个缺陷,但可能这些信息有助于解决……据我所知,当您单击窗口时,文本对象失去焦点,因此无法捕获事件
protected override void OnMouseDown(MouseButtonEventArgs e)
{
base.OnMouseDown(e);
Focus();
}
这似乎不起作用的原因是因为它需要单击文本对象来聚焦文本类
我的建议是:
您使用的是哪个版本的.NET?我知道他们在.NET4中修复了一些与WPF文本输入有关的错误,但我不知道这是否是其中之一。使用键盘时,TextInput工作正常,因此键盘的焦点是文本对象。只有手写识别失败。看起来手写识别可能有一个单独的焦点??