WPF中如何仅显示星期选择器与小时选择器?
刚接触WPF碰到这种需求太正常啦,别纠结!自带的DateTimePicker确实没法直接砍掉日历部分,不过咱们有几个简单的办法实现你要的「仅星期+小时」选择器:
方案1:用基础控件组合(新手友好)
这是最容易上手的方式,用ComboBox做星期选择,搭配ComboBox或Slider实现小时选择,完全不用碰复杂的控件模板。
示例代码(XAML)
<StackPanel Orientation="Horizontal" Spacing="15" Padding="20"> <!-- 星期选择器 --> <ComboBox x:Name="WeekDayComboBox" Width="120" SelectedIndex="0"> <ComboBoxItem Content="星期一" /> <ComboBoxItem Content="星期二" /> <ComboBoxItem Content="星期三" /> <ComboBoxItem Content="星期四" /> <ComboBoxItem Content="星期五" /> <ComboBoxItem Content="星期六" /> <ComboBoxItem Content="星期日" /> </ComboBox> <!-- 小时选择器(ComboBox版) --> <ComboBox x:Name="HourComboBox" Width="80" SelectedIndex="0"> <ComboBoxItem Content="00" /> <ComboBoxItem Content="01" /> <ComboBoxItem Content="02" /> <!-- ... 依次添加到23即可 --> <ComboBoxItem Content="23" /> </ComboBox> </StackPanel>
如果想要更直观的滑动选择小时,可以换成Slider+TextBlock的组合:
<StackPanel Orientation="Horizontal" Spacing="10" VerticalAlignment="Center"> <TextBlock Text="选择小时:" /> <Slider x:Name="HourSlider" Minimum="0" Maximum="23" Width="180" TickFrequency="1" IsSnapToTickEnabled="True" /> <TextBlock Text="{Binding ElementName=HourSlider, Path=Value, StringFormat='{}{0:00}'}" FontSize="14" FontWeight="SemiBold" /> </StackPanel>
进阶小技巧:绑定枚举
如果想要更规范的星期数据,不用手动写每个星期项,可以在后台代码绑定DayOfWeek枚举:
// 窗口构造函数里添加 WeekDayComboBox.ItemsSource = Enum.GetValues(typeof(DayOfWeek));
这样ComboBox会自动显示Monday到Sunday,如果需要中文的话,可以给枚举加特性或者做个简单的转换哦。
方案2:自定义模板或第三方控件(进阶)
如果觉得基础控件不够美观,也可以:
- 自定义
TimePicker的模板,只保留小时选择部分(WPF的控件模板可定制性很强,但需要一点XAML基础) - 用第三方WPF控件库,比如Extended WPF Toolkit里的
TimePicker,可以通过配置只显示小时选择器
不过对于刚接触WPF的你来说,先从方案1入手会更轻松,等熟悉了控件绑定和模板后再尝试进阶方案也不迟~
内容的提问来源于stack exchange,提问作者Elad




