ここでは、keydownイベントで別のキーを処理する必要があるウィンドウがあります。 Enterを押すと、テキストボックスがポップアップし、このテキストボックスに入力されたテキストは、ウィンドウキーダウンイベントを発生させるべきではない(SHOULD NOT)。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のコメントを外すと、textboxはテキストをまったく取得しません。私はポップアップがウィンドウkeydownハンドラの本体で開いているかどうかをチェックすることでこれを解決することができることを知っていますが、私の質問はどのようにテキストボックスからテキストを取得し、
あなたのユースケースでは、OriginalSourceは機能しますか?ここでの回答を参照してください:http://stackoverflow.com/questions/24872940/how-do-i-stop-wpf-keydown-events-from-bubbling-up-from-certain-contained-control – Bobby
キーが押されたときにコントロールにフォーカスが当てられますが、これはマウスイベントでは機能しますが、キープレスでは必ずしも明白ではありません – MikeT