2016-04-01 12 views
1

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?

+1

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

+0

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

cevap

0

Eğer sadece taşıma daha akıllı olması gerekir ateşleme olayı duramazsın

örn dikkatinizden kaçmış önizleme olayına olayları anahtarlama? What are WPF Preview Events?

veya

yüzden pencere olay işleyicisi içinde pop-up Görünürlük değerine dayanarak ele

if(popup.Visibility == Visibility.Visible) 
{ 
    //ignore event 
} 
else 
{ 
    //handle window processing 
    e.Handled = true; 
} 

e.Handled = true baloncuklanmasını iptal unutmayın oluşturabileceği yönünde başarısız/Tünel açma işlemi, yalnızca emin olduğunuz başka hiçbir şey olayın üstesinden gelmek istediğinizde ayarlanmalıdır.