gpt4 book ai didi

c# - WPF DatePicker LostFocus 触发七次

转载 作者:行者123 更新时间:2023-11-30 13:56:44 26 4
gpt4 key购买 nike

我这里的场景非常简单。请查看布局:

<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(七!)次。有一次,当我点击 TextBoxDatePicker 真的失去了焦点,我无法解释总共剩下六次。

我该如何解决?我只需要触发此事件的一次。或者我可以使用其他事件吗?我尝试了 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");
}
}

关于c# - WPF DatePicker LostFocus 触发七次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25160459/

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