自定义控件:在自定义控件中添加自定义按钮点击逻辑
Custom Controls: Add custom button click logic within a custom control
我正在创建一个屏幕键盘自定义控件,用于将文本发送到目标 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 与自定义 ICommand
一起使用,但不幸的是我无法在自定义控件中使用它。 (直到mm8
终于指出了一个方法)
您可以创建自定义 class 并向其添加 dependency properties。像这样:
public class CustomButton : Button
{
public static readonly DependencyProperty SomeCommandProperty =
DependencyProperty.Register(nameof(SomeCommand), typeof(ICommand), typeof(CustomButton));
public ICommand SomeCommand
{
get { return (ICommand)GetValue(SomeCommandProperty); }
set { SetValue(SomeCommandProperty, value); }
}
protected override void OnClick()
{
base.OnClick();
//do something based on the property value...
if (SomeCommand != null)
SomeCommand.Execute(null);
}
}
然后您可以在使用控件的任何地方设置依赖属性,例如:
<local:CustomButton Command="{Binding SomeCommand}" />
我正在创建一个屏幕键盘自定义控件,用于将文本发送到目标 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 与自定义 ICommand
一起使用,但不幸的是我无法在自定义控件中使用它。 (直到mm8
终于指出了一个方法)
您可以创建自定义 class 并向其添加 dependency properties。像这样:
public class CustomButton : Button
{
public static readonly DependencyProperty SomeCommandProperty =
DependencyProperty.Register(nameof(SomeCommand), typeof(ICommand), typeof(CustomButton));
public ICommand SomeCommand
{
get { return (ICommand)GetValue(SomeCommandProperty); }
set { SetValue(SomeCommandProperty, value); }
}
protected override void OnClick()
{
base.OnClick();
//do something based on the property value...
if (SomeCommand != null)
SomeCommand.Execute(null);
}
}
然后您可以在使用控件的任何地方设置依赖属性,例如:
<local:CustomButton Command="{Binding SomeCommand}" />