XAML WPF DatePicker按下Enter键后的日期验证

68bkxrlz  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(166)

我在WPF应用程序中设置了一个InputBinding,沿着了一个DatePicker和一个TextBox。
当我在焦点不在DatePicker上的情况下按下Enter键时,我的KeyBinding事件被触发。
当焦点在DatePicker上时,将执行DatePicker的验证。验证后,既不执行KeyDown也不执行KeyBinding命令。
我怀疑DatePicker-TextBox将“Handled”设置为true。
有什么方法可以让我从DatePicker访问验证功能吗?

<Window.InputBindings>
     <KeyBinding Key="Enter" Command="{Binding EnterCommand}" />
 </Window.InputBindings>

 <Grid>
     <StackPanel>
         <DatePicker
             KeyDown="DatePicker_KeyDown"
             PreviewKeyDown="DatePicker_PreviewKeyDown" />

         <TextBox Height="20" />
     </StackPanel>
 </Grid>

字符串
WPF datagrid with datepicker in cell blocks the enter key
使用这个CustomDatePicker,我可以将Handled更改为false。
但是如果第一次按下Enter键启动验证并将“Handled”设置为true,第二次按下Enter键将启动KeyBinding事件,则会更好。
有没有办法做到这一点?

46qrfjad

46qrfjad1#

如果你想在每次按下Enter键时调用EnterCommand,而不管当前哪个控件拥有焦点以及该控件是如何实现的,你应该处理PreviewKeyDown事件,而不是使用KeyBinding

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        PreviewKeyDown += (s, e) =>
        {
            dynamic viewModel = DataContext; //..or cast to your type
            viewModel.EnterCommand.Execute(null);
        };

        ...
        }
    }
}

字符串
这与您当前使用KeyBinding的解决方案完全一样符合MVVM,但它工作得更好(取决于您的需求)。

相关问题