gpt4 book ai didi

asp.net - AutoCompleteBox 中的 'enter' 不会触发 KeyDown 事件

转载 作者:行者123 更新时间:2023-12-02 15:17:15 25 4
gpt4 key购买 nike

我在 ASP.NET Web 应用程序中使用 Silverlight 用户控件。用户控件有几个自动完成框,似乎 Enter 键永远不会在其中任何一个中触发 keydown 事件,而其他键则会触发该事件。

我假设自动完成框必须以不同的方式处理输入键,也许是为了从列表中选择一个项目。 - 因此它适用于简单的文本框。

我正在考虑在新的派生控件中重写事件处理程序...

你们找到解决办法了吗?

最佳答案

Joe White 的观点是正确的,某些控件会自行处理按键事件,这会产生将它们屏蔽给更高级别控件的效果。如果您查看 Reflector 中的 AutoCompleteBox,您会发现 Enter、Escape 和 F4 都会导致某些事情发生并标记 e.Handled = true。

不幸的是,Silverlight 世界中不存在 PreviewKeyDown。

我能够防止控件响应和捕获这些按键事件的一种方法是对控件进行子类化并重写 OnKeyDown 方法。像这样的东西可以让您控制控件是否对关键事件使用react:

public class MyAutoCompleteBox : AutoCompleteBox
{
public static readonly DependencyProperty HandleKeyEventsProperty = DependencyProperty.Register(
"HandleKeyEvents",
typeof(bool),
typeof(MyAutoCompleteBox),
new PropertyMetadata(true));

public bool HandleKeyEvents
{
get { return (bool)GetValue(HandleKeyEventsProperty); }
set { SetValue(HandleKeyEventsProperty, value); }
}

protected override void OnKeyDown(KeyEventArgs e)
{
if (this.HandleKeyEvents)
{
base.OnKeyDown(e);
}
}
}

然后,您可以使用 XAML 中的 HandleKeyEvents 属性来禁止控件处理它们:

<local:MyAutoCompleteBox HandleKeyEvents="False"/>

这种类型的事情会阻止基本 AutoCompleteBox 标记 e.Handled = true 并允许事件冒泡,以便您的更高级别控件可以用它做其他事情。如果您想防止其他 KeyDown 事件(除了 Enter 之外)被破坏,您可以更具体地了解处理哪些键。

关于asp.net - AutoCompleteBox 中的 'enter' 不会触发 KeyDown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3512246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com