ScrollViewer WPF中的可滚动控件

时间:2018-10-20 13:12:37

标签: c# wpf scrollviewer

我控制了选择日期。您可以增加或减少日,月或年 只需滚动MouseWheel。 但是当我将此控件放在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 :(得分:1)

您可以从PreviewMouseWheel注册ScrollViewer事件,并将其转发到DateTimeSelect控件。

此代码在第一个ScrollViewer中引导PreviewMouseWheel事件:

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的更多信息。

答案 1 :(得分:0)

感谢您的回答。 我尝试了很多方法,但是我意识到ScrollViewer无法正常工作。 所以我做了一个新项目,并将所有文件从旧项目一步一步地复制到了新项目 每次更改后,我都会检查scrollerViewer是否正常启动。 我使用的是DevExpress MVVM框架,因此必须在Bootstarpper中创建并显示mainWindow,然后从App.xaml中删除StartupUri。 我意识到,这是我遇到的问题,每次我设置StartupUri并让App类向MainWindow展示任何东西时都没有错,但是当我手动创建MainWindow并展示ScrollViewer捕获MouseWheel并防止其子项拖拽它时。