У меня есть диалоговое окно, которое содержит элемент управления календаря и кнопку. Как только пользователь выбрал дату в календаре, он нажимает кнопку «Сохранить», и это выполняет действие и закрывает диалоговое окно:
<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);
Любые предложения о том, как получить это работать?