[英]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.