wpf 判斷textbox 輸入了enter
时间: 2024-10-11 18:03:22 浏览: 23
在 WPF 中,如果你想检测 `TextBox` 是否接收到回车键(Enter 键)的输入,你可以创建一个自定义的文本框行为(Custom Textbox Behavior)。首先,需要创建一个新的 Behavior 类,并在其中添加 KeyDown 事件处理程序,检查按下的是 Enter 键。
以下是一个简单的示例:
1. 创建一个新的行为类,例如 `EnterPressBehavior.cs`:
```csharp
public class EnterPressBehavior : Behavior<TextBox>
{
public static readonly DependencyProperty PressedEnterProperty =
DependencyProperty.Register(nameof(PressedEnter), typeof(bool), typeof(EnterPressBehavior),
new FrameworkPropertyMetadata(false, OnPressedEnterChanged));
private bool pressedEnter;
public bool PressedEnter
{
get => (bool)GetValue(PressedEnterProperty);
set => SetValue(PressedEnterProperty, value);
}
protected override void OnAttached()
{
AssociatedObject.KeyDown += OnKeyDown;
}
protected override void OnDetaching()
{
AssociatedObject.KeyDown -= OnKeyDown;
}
private void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
pressedEnter = true;
e.Handled = true; // 阻止默认的回车效果
}
}
private static void OnPressedEnterChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var behavior = (EnterPressBehavior)d;
behavior.OnPressedEnterChanged((bool)e.NewValue);
}
protected virtual void OnPressedEnterChanged(bool pressedEnter)
{
// 在这里添加你想在按下Enter后执行的代码
}
}
```
在你的 XAML 中应用这个行为:
```xaml
<Window xmlns:local="clr-namespace:YourNamespace">
<TextBox Name="textBox" local:EnterPressBehavior.PressedEnter="{Binding Path=PressedEnter, UpdateSourceTrigger=PropertyChanged}" />
</Window>
```
现在,当你在 `TextBox` 中按 Enter 键时,`PressedEnter` 属性会被设置为 `true`,你可以在这个属性变化的地方添加你需要的逻辑。
阅读全文