Burada, anahtar teslim etkinliğinde farklı tuşların ele alınması gereken bir pencere var. Enter tuşuna basıldığında, açılan metin kutusu açılır ve bu metin kutusuna yazılan metin pencere keydown olayını yükseltmemelidir. gerideKeydown etkinliğini balondan durdurmanın doğru yolu
<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>
Kodu:
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;
}
ben açılan açıldığında ise yangın pencere keydown olayı gerekmez. Unutulmaz //e.Handled = true textbox hiç bir metin alamazdı. Ben pencere keydown işleyici gövdesinde açılır açık olup olmadığını kontrol ederek bunu çözebilir biliyorum, ama benim soru nasıl textbox buble tür yapmak ve ne zaman kullanıcı türlerini almak textbox upble durdurmak için nasıl durdurabilir miyim?
Kullanım durumunuz için OriginalSource işe yarar mı? Buradaki cevaba bakın: http://stackoverflow.com/questions/24872940/how-do-i-stop-wpf-keydown-events-from-bubbling-up-from-certain-contained-control – Bobby
hangisi tuşa basıldığında, fare olayları için çalışan, ancak tuş basımları için her zaman açık değildir. – MikeT