Откройте всплывающее окно WPF на фокус TextBox - PullRequest
11 голосов
/ 12 августа 2010

Я хочу открыть всплывающее окно, когда фокус находится на текстовом поле. Вот код, который я написал:

<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;
    }

Если я нажимаю на кнопку, все работаетнормально Если я щелкаю по текстовому окну, всплывающее окно открывается и закрывается

Если я удаляю StaysOpen = "False", всплывающее окно открывается, но не закрывается

Я пытаюсь установить фокус на всплывающем окне перед открытиемэто, но это не так хорошо работает

У вас есть идеи?

Большое спасибо, Нидаль.

1 Ответ

16 голосов
/ 13 августа 2010

Добавьте следующую привязку к вашей всплывающей декларации:

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

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...