【发布时间】:2020-09-25 11:43:17
【问题描述】:
我正在创建一个屏幕键盘自定义控件,它将文本发送到目标TextBox。在这个键盘内部,我布置了自定义 KeyboardKey 按钮控件,这些控件具有关联的文本输出或键盘按键(退格键、箭头键等)。
目前,我已经定义了一堆不同的控件,并在控件模板中硬编码了它们的Click 功能:
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
Click += (s, e) =>
{
keyboard.Target.Focus(); // Focus on parent keyboard's TextBox
/* Key press logic, e.g. send character output or execute key press */
};
}
但我想知道我是否不能以更有条理的方式来做这件事。我观看了this tutorial about routed events 与自定义ICommands 一起工作,但不幸的是我无法使其在自定义控件中工作。 (直到mm8 最终指出了一种方法)
【问题讨论】:
-
这是否意味着您有多个从 Button 派生的类?什么原因?
-
您可以使用附加属性。类似于孩子告诉
Grid他们占据了哪个Row和Column,你可以告诉你的键盘应该如何表现。 -
@Clemens 是的,我目前派生了一个
OutputKey(字符输出)、LeftKey(导航)、RightKey(导航)和BackSpaceKey,但它们管理起来很烦人如果需要,请更新。 -
@Sinatr 理想情况下,我会创建一种从
Button派生的KeyboardKey并给他们自定义命令,但我不确定如何。您能否指出一个在自定义控件中使用附加属性的示例?
标签: c# wpf .net-core custom-controls