如何禁用Avalonia中CalendarDatePicker的鼠标滚动功能?
禁用Avalonia CalendarDatePicker的鼠标滚动功能
Avalonia的CalendarDatePicker确实没有直接禁用鼠标滚动的内置属性,不过可以通过以下两种简单方法实现需求:
方法一:通过PreviewMouseWheel事件拦截(最简方案)
直接在XAML中给CalendarDatePicker添加PreviewMouseWheel事件,在后台代码中标记事件已处理,阻止滚动事件触发日期变更:
修改后的XAML代码:
<CalendarDatePicker FontWeight="SemiBold" DisplayDateStart="{Binding Source={x:Static sys:DateTime.Now}, StringFormat=dd/MMM/yyyy}" SelectedDate="{Binding ExpiredDate}" IsTodayHighlighted="True" BorderThickness="0" VerticalContentAlignment="Center" HorizontalAlignment="Center" Background="Transparent" Watermark="Выберите дату" IsEnabled="{Binding !Status}" Grid.Column="1" PreviewMouseWheel="CalendarDatePicker_PreviewMouseWheel"></CalendarDatePicker>
后台代码(C#):
private void CalendarDatePicker_PreviewMouseWheel(object sender, Avalonia.Input.MouseWheelEventArgs e) { // 标记事件已处理,阻止后续传递 e.Handled = true; }
方法二:通过自定义控件样式(无代码后台)
如果不想写后台代码,可以通过修改CalendarDatePicker的控件模板,给内部的Calendar或输入区域添加滚轮事件拦截:
<Style TargetType="CalendarDatePicker"> <Setter Property="Template"> <ControlTemplate TargetType="CalendarDatePicker"> <!-- 保留原有模板结构,找到内部接收滚轮事件的元素添加拦截 --> <Grid> <TextBox x:Name="TextBox" PreviewMouseWheel="(s,e)=>e.Handled=true"/> <Popup x:Name="Popup"> <Calendar x:Name="Calendar" PreviewMouseWheel="(s,e)=>e.Handled=true"/> </Popup> </Grid> </ControlTemplate> </Setter> </Style>
注:实际模板结构请参考Avalonia官方默认模板,确保替换后功能正常,核心是给内部接收滚轮事件的元素添加
e.Handled=true的处理。
两种方法都能有效阻止鼠标滚动改变CalendarDatePicker的选中日期,推荐第一种最简方案快速实现需求。
内容的提问来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

