这里我有窗口需要处理keydown事件中的不同键。当按下Enter时弹出文本框出现,文本键入此文本框不应该引发窗口keydown事件。
<Window x:Class="PopupTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:PopupTest"
mc:Ignorable="d"
Title="MainWindow"
Height="350"
Width="525"
KeyDown="Window_KeyDown" >
<Grid>
<Popup Name="symbolPopup"
Grid.Row="0"
Placement="RelativePoint"
IsOpen="False">
<TextBox Width="70" x:Name="symbolTextBox"
KeyDown="symbolTextBox_KeyDown"
Background="#FFFFDF18" />
</Popup>
</Grid>
代码背后:
private void Window_KeyDown(object sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.Enter:
{
symbolPopup.IsOpen = true;
symbolTextBox.Focus();
break;
}
default:
break;
}
}
private void symbolTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
symbolPopup.IsOpen = false;
string name = symbolTextBox.Text;
symbolTextBox.Text = null;
e.Handled = true;
MessageBox.Show(name + " assigned");
}
// e.Handled = true;
}
打开弹出窗口时,我不需要触发窗口keydown事件。如果我取消注释//e.Handled = true文本框根本不会得到任何文本。我知道我可以通过检查弹出窗口是否在窗口keydown处理程序的主体中打开来解决这个问题,但我的问题是如何阻止keydown从文本框中弹出来同时让文本框获取用户类型?
答案 0 :(得分:0)
你无法阻止事件解雇你只需要更聪明地处理
例如 你考虑过将事件切换到预览事件吗? What are WPF Preview Events?
或者您无法根据弹出窗口的可见性
的值设置处理所以 在窗口事件处理程序
中std::vector
请记住,e.Handled = true会取消冒泡/隧道过程,所以只有当你确定没有其他人想要处理事件时才应该设置