Кнопка WPF не запускает ни одного клика - PullRequest
1 голос
/ 29 января 2020

У меня есть диалоговое окно, которое содержит элемент управления календаря и кнопку. Как только пользователь выбрал дату в календаре, он нажимает кнопку «Сохранить», и это выполняет действие и закрывает диалоговое окно:

<Window...>
    <Grid x:Name="CalendarGrid">
        <Grid.ColumnDefinitions>...</Grid.ColumnDefinitions>
        <Grid.RowDefinitions>...</Grid.RowDefinitions>
        <StackPanel Grid.Column="0" Grid.Row="0" x:Name="StackPanel1">
            <Calendar x:Name="StartDate" HorizontalAlignment="Center" SelectedDatesChanged="StartDate_SelectedDatesChanged" />
        </StackPanel>
        <StackPanel Grid.ColumnSpan="2" Grid.Row="1">
            <Button x:Name="SaveButton" Content="Save" Click="SaveButton_Click" Width="50" IsDefault="True" ClickMode="Press" />
        </StackPanel>
    </Grid>
</Window>

Проблема, с которой я сталкиваюсь, заключается в том, что после выбора даты кнопка не реагирует на одно нажатие - мне нужно дважды щелкнуть ее, чтобы запустить событие щелчка. Я попытался использовать события PreviewMouseLeftButtonDown, PreviewMouseDown и PreviewMouseUp на кнопке, но ни одно из них не может выполнить sh this.

Я поместил PreviewMouseDown в элемент для тестирования, и он срабатывает на первый клик. Помещение события предварительного просмотра на содержащую кнопку не отвечает на первый щелчок - однако я должен дважды щелкнуть по нему, как кнопка.

Я также пытался сфокусироваться на кнопке после даты выбрано:

    private void StartDate_SelectedDatesChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
    {
        SaveButton.Focus();
    }

Это тоже не работает, если только я не отлаживаю и не ставлю точку останова в событии StartDate_SelectedDatesChanged. В этом случае, после того как я нажму F5, чтобы продолжить, кнопка получает фокус и работает один клик. Я даже пытался поместить оператор Thread.Sleep () в событие StartDate_SelectedDatesChanged, но это тоже не сработало.

Если это помогает, я открываю окно на главном экране. Во-первых, метод, который открывает окно:

public static void SetWindowPosition(Window dialog)
{
    Window mainWindow = Application.Current.MainWindow;

    dialog.Owner = mainWindow;
    dialog.Left = mainWindow.Left + (mainWindow.ActualWidth - dialog.ActualWidth) / 2;
    dialog.Top = mainWindow.Top + (mainWindow.ActualHeight - dialog.ActualHeight) / 2.5;
}

Это код, который вызывает SetWindowPosition (), чтобы открыть диалоговое окно:

 var dialog = new CalendarDialog();
 dialog.SetValues(Phrases.SelectDateRange, Phrases.StartingDate, Phrases.EndingDate, null, null);
 SetWindowPosition(dialog);

Любые предложения о том, как получить это работать?

1 Ответ

1 голос
/ 29 января 2020

Попробуйте вызвать Mouse.Capture(null) в вашем StartDate_SelectedDatesChanged обработчике событий.

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