c# – WPF DatePicker LostFocus触发七次
发布时间:2020-12-16 02:02:47 所属栏目:百科 来源:网络整理
导读:我这里有一个非常简单的场景.请看布局,请: Grid Grid.RowDefinitions RowDefinition/RowDefinition RowDefinition/RowDefinition /Grid.RowDefinitions TextBox Grid.Row="0"/TextBox DatePicker Grid.Row="1" Name="_datePicker" LostFocus="_datePicker_O
我这里有一个非常简单的场景.请看布局,请:
<Grid> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <TextBox Grid.Row="0"></TextBox> <DatePicker Grid.Row="1" Name="_datePicker" LostFocus="_datePicker_OnLostFocus"></DatePicker> </Grid> 和代码隐藏: private void _datePicker_OnLostFocus(object sender,RoutedEventArgs e) { Debug.WriteLine("LostFocuse"); } 所以,麻烦的是当我拿起一些日期然后点击TextBox然后,事件LostFocus激发7(七!)次.一个当DatePicker失去了焦点,当我在TextBox上开始并且完全剩下6次时,我无法解释. 我该如何解决?我只需要一次这次活动.或者我可以使用其他一些活动?我用同样的结果尝试了LostKeyBoardFocus. 解决方法
LostFocus是路由策略设置为Bubble的路由事件.通过泡沫意味着它会向其父窗口冒泡直到根窗口,直到通过显式设置e.Handled = true;来处理它.
所以,这意味着即使当孩子控制松散焦点时,它也会冒泡到你的datePicker,这就是为什么你会看到你的方法的多次命中. 您可以检查属性IsKeyboardFocusWithin,如果焦点位于您的控件中,则返回该属性.由于您对监听子丢失焦点事件不感兴趣,因此您可以在此处理程序中检查此属性,并仅在datePicker丢失实际焦点时执行代码: private void _datePicker_OnLostFocus(object sender,RoutedEventArgs e) { DatePicker picker = sender as DatePicker; if (!picker.IsKeyboardFocusWithin) { System.Diagnostics.Debug.WriteLine("LostFocuse"); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |