mon*_*str 3 c# wpf datepicker lost-focus
我这里有一个非常简单的场景.请看布局,请:
<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>
Run Code Online (Sandbox Code Playgroud)
和代码隐藏:
private void _datePicker_OnLostFocus(object sender, RoutedEventArgs e)
{
Debug.WriteLine("LostFocuse");
}
Run Code Online (Sandbox Code Playgroud)
所以,麻烦的是当我拿起一些日期然后点击时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");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1875 次 |
| 最近记录: |