You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 3.5 WPF中DateTimePicker控件实现问题求助

解决方案:WPF VB.NET 3.5 实现日期选择器

方案1:手动引用WPF Toolkit的DatePicker控件

.NET 3.5的WPF原生未内置DatePicker和Calendar控件,微软官方的WPF Toolkit提供了这些控件,由于你无法使用NuGet,可通过手动添加dll实现:

  • 下载适配.NET 3.5版本的WPF Toolkit二进制发布包
  • 解压后找到System.Windows.Controls.dll,右键项目→添加引用→浏览选中该dll
  • 在XAML中添加命名空间:
xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
  • 使用DatePicker控件:
<toolkit:DatePicker x:Name="myDatePicker" SelectedDateChanged="myDatePicker_SelectedDateChanged"/>
  • VB.NET后台获取选中日期:
Private Sub myDatePicker_SelectedDateChanged(sender As Object, e As SelectionChangedEventArgs)
    Dim selectedDate As Date? = DirectCast(sender, DatePicker).SelectedDate
    If selectedDate.HasValue Then
        Dim pickedDate As Date = selectedDate.Value
        ' 此处处理选中的日期逻辑
    End If
End Sub

方案2:自定义简易日期选择器(无需第三方dll)

如果无法获取WPF Toolkit的dll,可自行实现基础日期选择功能:

文本框输入+日期验证

<TextBox x:Name="dateInput" LostFocus="dateInput_LostFocus"/>
Private Sub dateInput_LostFocus(sender As Object, e As RoutedEventArgs)
    Dim inputText As String = DirectCast(sender, TextBox).Text
    Dim parsedDate As Date
    If Date.TryParse(inputText, parsedDate) Then
        ' 验证成功,使用parsedDate
    Else
        MessageBox.Show("请输入有效的日期格式,如yyyy-MM-dd")
        DirectCast(sender, TextBox).Text = ""
    End If
End Sub

年/月/日下拉选择面板

<StackPanel Orientation="Horizontal">
    <TextBox x:Name="dateTextBox" Width="120" IsReadOnly="True"/>
    <Button Content="..." Click="DatePickerButton_Click"/>
    <Popup x:Name="datePopup" PlacementTarget="{Binding ElementName=dateTextBox}">
        <StackPanel Background="White" Padding="10">
            <ComboBox x:Name="yearCombo" Width="80" SelectionChanged="yearCombo_SelectionChanged"/>
            <ComboBox x:Name="monthCombo" Width="80" SelectionChanged="monthCombo_SelectionChanged"/>
            <ComboBox x:Name="dayCombo" Width="80"/>
            <Button Content="确定" Click="ConfirmDate_Click"/>
        </StackPanel>
    </Popup>
</StackPanel>
Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
    ' 初始化年份选项(最近20年)
    For year As Integer = DateTime.Now.Year - 10 To DateTime.Now.Year + 10
        yearCombo.Items.Add(year)
    Next
    yearCombo.SelectedItem = DateTime.Now.Year
    ' 初始化月份
    For month As Integer = 1 To 12
        monthCombo.Items.Add(month)
    Next
    monthCombo.SelectedItem = DateTime.Now.Month
    ' 初始化日期
    UpdateDayCombo()
End Sub

Private Sub UpdateDayCombo()
    dayCombo.Items.Clear()
    Dim selectedYear As Integer = CInt(yearCombo.SelectedItem)
    Dim selectedMonth As Integer = CInt(monthCombo.SelectedItem)
    Dim daysInMonth As Integer = DateTime.DaysInMonth(selectedYear, selectedMonth)
    For day As Integer = 1 To daysInMonth
        dayCombo.Items.Add(day)
    Next
    dayCombo.SelectedItem = DateTime.Now.Day
End Sub

Private Sub yearCombo_SelectionChanged(sender As Object, e As SelectionChangedEventArgs)
    UpdateDayCombo()
End Sub

Private Sub monthCombo_SelectionChanged(sender As Object, e As SelectionChangedEventArgs)
    UpdateDayCombo()
End Sub

Private Sub DatePickerButton_Click(sender As Object, e As RoutedEventArgs)
    datePopup.IsOpen = Not datePopup.IsOpen
End Sub

Private Sub ConfirmDate_Click(sender As Object, e As RoutedEventArgs)
    Dim selectedDate As New Date(CInt(yearCombo.SelectedItem), CInt(monthCombo.SelectedItem), CInt(dayCombo.SelectedItem))
    dateTextBox.Text = selectedDate.ToString("yyyy-MM-dd")
    datePopup.IsOpen = False
End Sub

关于NuGet无法安装的临时排查

如果后续想恢复NuGet功能,可尝试:

  • 确认项目目标框架确实为.NET Framework 3.5
  • 检查NuGet包源是否包含nuget.org,且状态正常
  • 以管理员身份运行Visual Studio,排查权限导致的安装失败问题

内容的提问来源于stack exchange,提问作者Kristina Tamaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:40:32