2010-08-12 14 views
9

chcę otworzyć okienko, gdy ostrość jest na polu tekstowym Oto kod pisałem:Otwarte WPF Popup na TextBox naciskiem

<Window x:Class="Testpopup.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <StackPanel> 
     <TextBox x:Name="text" GotKeyboardFocus="text_GotKeyboardFocus" /> 
     <Button Click="Button_Click" Content="but"/> 
     <Popup x:Name="popup" Width="100" Height="100" PlacementTarget="{Binding ElementName=text}" 
      StaysOpen="False"> 
      <Grid> 
       <StackPanel> 
        <DatePicker /> 
        <TextBox /> 
       </StackPanel> 
      </Grid> 
     </Popup> 

    </StackPanel> 
</Grid> 

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     popup.IsOpen = true; 
    } 

    private void text_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) 
    { 
     popup.IsOpen = true; 
    } 

Jeśli kliknę przycisk wszystko działa poprawnie Po kliknięciu pola tekstowego pojawi się i zamknie okienko wyskakujące

Jeśli usuniemy StaysOpen = "False" popup otworzy się, ale nigdy się nie zamknie

Próbuję ustawić fokus na wyskakującym okienku przed otwarciem, ale to nie działa tak dobrze

Masz jakiś pomysł?

Wielkie dzięki, Nidal.

+0

Czy próbowałeś z wyzwalaczami? http://msdn.microsoft.com/en-us/library/system.windows.trigger.aspx –

Odpowiedz

14

Dodaj następujący wiązania do Popup-deklaracji:

StaysOpen="{Binding ElementName=text,Path=IsKeyboardFocused}" 

To powinno załatwić sprawę.

+0

Dzięki, To działa dobrze. –