简体   繁体   English

ScrollViewer WPF中的可滚动控件

[英]Scrollable Control in ScrollViewer WPF

I made a control for selecting Date. 我做了一个选择日期的控件。 you can increase or decrease Day,Month or year just by Scrolling MouseWheel. 您可以仅通过滚动MouseWheel来增加或减少Day,Month或Year。 but when I put this control in ScrollViewer MouseWheel will scroll ScrollViewer and MyControl not work properly. 但是当我将此控件放在ScrollViewer中时,MouseWheel将滚动ScrollViewer和MyControl无法正常工作。 I have searched a lot to prevent ScrollViewer from handling MouseWheel but I couldn't. 我进行了大量搜索,以防止ScrollViewer处理MouseWheel,但我做不到。

this is my Xaml: 这是我的Xaml:

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

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

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

You can sign up for PreviewMouseWheel event from ScrollViewer and forward it to your DateTimeSelect control. 您可以从ScrollViewer注册PreviewMouseWheel事件,然后将其转发到DateTimeSelect控件。

This code directs the PreviewMouseWheel event within the first ScrollViewer: 此代码在第一个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);
        }
    } 

For more information, see https://serialseb.com/blog/2007/09/03/wpf-tips-6-preventing-scrollviewer-from/ . 有关更多信息,请参阅https://serialseb.com/blog/2007/09/03/wpf-tips-6-preventing-scrollviewer-from/

To know more about how to use it in your case, further information about contol: DateTimeSelect is required. 要了解有关如何在您的情况下使用它的更多信息,需要有关contol: DateTimeSelect更多信息contol: DateTimeSelect

Thank for your answers. 感谢您的回答。 I tried so many ways but I realized that ScrollViewer not working as expected. 我尝试了很多方法,但是我意识到ScrollViewer无法正常工作。 so I made a new project and copied all files from old project to new one step by step and after each change I checked whether scrollerViewer woks properly or not. 因此,我创建了一个新项目,并将所有文件从旧项目逐步复制到新文件中,每次更改后,我检查了scrollerViewer是否正常启动。 I am using DevExpress MVVM framework so I have to create and show mainWindow in Bootstarpper and remove StartupUri from App.xaml. 我使用的是DevExpress MVVM框架,因此必须在Bootstarpper中创建并显示mainWindow,然后从App.xaml中删除StartupUri。 I realized that this is where I have problem, every time I set StartupUri and and let App class to show MainWindow nothing is wrong but as I Creating MainWindow manually and show ScrollViewer catches MouseWheel and preventing its children to hadnling it. 我意识到,这是我有问题的地方,每次我设置StartupUri并让App类向MainWindow展示任何东西时都没有错,但是当我手动创建MainWindow并展示ScrollViewer捕获MouseWheel并防止其子项拖拽它时。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM