Прокручиваемый элемент управления в ScrollViewer WPF - PullRequest
0 голосов
/ 20 октября 2018

Я сделал элемент управления для выбора даты.Вы можете увеличивать или уменьшать день, месяц или год, просто прокручивая колесико мыши.но когда я помещаю этот элемент управления в ScrollViewer, MouseWheel будет прокручивать ScrollViewer и MyControl не будет работать должным образом.Я много искал, чтобы помешать ScrollViewer обрабатывать MouseWheel, но не смог.

это мой Xaml:

<ScrollViewer>
    <StackPanel>
         some other elements...

            <controls:DateTimeSelect Width="400" Value="{x:Static system:DateTime.Now}"/>

         some other elements...
    </StackPanel>
</ScrollViewer>

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Спасибо за ваши ответы.Я пробовал так много способов, но я понял, что ScrollViewer работает не так, как ожидалось.поэтому я создал новый проект и пошагово скопировал все файлы из старого проекта в новый, и после каждого изменения я проверял, правильно ли работает scrollerViewer.Я использую DevExpress MVVM Framework, поэтому я должен создать и показать mainWindow в Bootstarpper и удалить StartupUri из App.xaml.Я понял, что у меня проблема, каждый раз, когда я устанавливаю StartupUri и позволяю классу App показывать MainWindow, в этом нет ничего плохого, так как я создаю MainWindow вручную и показываю, что ScrollViewer ловит MouseWheel и не позволяет его дочерним элементам обходить его.

0 голосов
/ 21 октября 2018

Вы можете подписаться на событие PreviewMouseWheel с ScrollViewer и переслать его на ваш DateTimeSelect элемент управления.

Этот код направляет событие PreviewMouseWheel в первом ScrollViewer:

private void HandlePreviewMouseWheel(object sender, MouseWheelEventArgs e)
    {
        if (sender is ScrollViewer && !e.Handled)
        {
            e.Handled = true;
            var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
            eventArg.RoutedEvent = UIElement.MouseWheelEvent;
            eventArg.Source = sender;
            var parent = ((Control)sender).Parent as UIElement;
            parent.RaiseEvent(eventArg);
        }
    } 

Для получения дополнительной информации см. https://serialseb.com/blog/2007/09/03/wpf-tips-6-preventing-scrollviewer-from/.

Чтобы узнать больше о том, как использовать его в вашем случае, требуется дополнительная информация о contol: DateTimeSelect.

...