为什么wpftoolkit datepicker吃了返回密钥销售活动?
-
14-10-2019 - |
题
我想知道是否有人知道为什么datePicker会将标准键传递给任何父级控件的键向路由事件,而不是返回键?
这是我写的XAML:
<WrapPanel Name="_wpParameters"
Grid.Row="0" Grid.Column="0"
Orientation="Horizontal"
Grid.IsSharedSizeScope="True"
Keyboard.KeyDown="_wpParameters_KeyDown" >
<!-- this is where the dynamic parameter controls will be added -->
</WrapPanel>
这是我用来检查返回键的代码:
private void _wpParameters_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
RaiseEvent(new RoutedEventArgs(LoadLiveResultsEvent, this));
}
}
我在偶然的情况下使用键(即将使用密钥),但我发现标准数字和 /字符正在启动逻辑,但没有返回键,这很有趣。有什么想法,为什么不包括返回键作为键向下键?
解决方案
关键事件是一个较低级别的文本输入事件,可能无法按照某些控件的预期行为。这是因为某些控件具有控件合成或类处理,可提供更高级别的文本输入处理和相关事件。
如所见 MSDN...我的假设是,控件正在消耗事件,也许将文本提交为可约束的源和其他清理,然后将事件标记为处理。
其他提示
此外,不得不提到我的解决方案。我有一个父视图,可以处理所有儿童ViewModels的关键事件。我宣布了针对DatePicker,MaskEdtextbox等特殊控件的行为...该捕获PreviewKey Down隧道事件并提高钥匙down泡泡事件:
public class EnterPressedBehavior : Behavior<UIElement>
{
public ICommand EnterPressedCommand { get; private set; }
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.PreviewKeyDown += EnterPressed;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.PreviewKeyDown -= EnterPressed;
}
private void EnterPressed(object sender, KeyEventArgs keyEventArgs)
{
if (Keyboard.PrimaryDevice != null && Keyboard.PrimaryDevice.ActiveSource != null)
{
var eventArgs = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, keyEventArgs.Key) { RoutedEvent = UIElement.KeyDownEvent };
AssociatedObject.RaiseEvent(eventArgs);
}
}
}
分配给datepicker的行为:
<DatePicker x:Name="BirthDateDatePicker" Grid.Column="1"
Grid.Row="6" Margin="3" HorizontalAlignment="Stretch"
IsEnabled="{Binding PersonFieldsEditDenied}"
Validation.ErrorTemplate="{StaticResource DefaultValidationTemplate}"
AutomationProperties.AutomationId="BirthDateDatePicker">
<i:Interaction.Behaviors>
<viewModels:EnterPressedBehavior />
</i:Interaction.Behaviors>
</DatePicker>
父母视图聆听的是:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title=""
KeyDown="OnKeyDownHandler">
背后的代码:
private void OnKeyDownHandler(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
// your code
}
}
不隶属于 StackOverflow