gpt4 book ai didi

xaml - C#/XAML Metro 应用程序中的 DatePicker 控件?

转载 作者:行者123 更新时间:2023-12-02 22:29:03 26 4
gpt4 key购买 nike

我想在我的 metro 应用程序中使用 DATEPICKER 控件,但在 c#/xaml metro 应用程序中似乎没有可用的 datepicker 控件,

那么你们中有人找到解决这个问题的方法了吗?

请告诉我,

感谢和问候。

最佳答案

我从 codeplex 上的一个私有(private)解决方案中找到了这个,我真诚地向拥有该链接的人道歉......但是你可以使用以下代码创建一个控件:

Xaml 文件:

<UserControl x:Class="MyNamespace.Controls.DatePicker"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>

<ComboBox x:Name="Day" Grid.Column="0" SelectionChanged="Day_SelectionChanged" Width="70" Margin="0,0,10,0" />
<ComboBox x:Name="Month" Grid.Column="1" SelectionChanged="Day_SelectionChanged" Width="70" Margin="0,0,10,0" />
<ComboBox x:Name="Year" Grid.Column="2" SelectionChanged="Day_SelectionChanged" Width="100" />
</Grid>
</Grid>
</UserControl>

及其背后的代码:

using System;
using System.Collections.Generic;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace MyNamespace.Controls
{
public sealed partial class DatePicker
{
private bool initializing = true;
public DatePicker()
{
InitializeComponent();

UpdateValues(0, 0);
Day.SelectedIndex = 0;
Month.SelectedIndex = 0;
Year.SelectedIndex = 0;
initializing = false;
}

public static readonly DependencyProperty AllowNullProperty =
DependencyProperty.Register("AllowNull", typeof(bool), typeof(DatePicker), new PropertyMetadata(true));

public bool AllowNull
{
get { return (bool)GetValue(AllowNullProperty); }
set { SetValue(AllowNullProperty, value); }
}

public static readonly DependencyProperty SelectedDateProperty =
DependencyProperty.Register("SelectedDate", typeof(DateTime?), typeof(DatePicker), new PropertyMetadata(null, OnSelectedItemChanged));

public DateTime? SelectedDate
{
get { return (DateTime?)GetValue(SelectedDateProperty); }
set { SetValue(SelectedDateProperty, value); }
}

public event RoutedEventHandler SelectedItemChanged;

private static void OnSelectedItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ctrl = (DatePicker)d;
if (ctrl.initializing)
return;

ctrl.initializing = true;
ctrl.UpdateDate();
ctrl.initializing = false;

if (ctrl.SelectedItemChanged != null)
ctrl.SelectedItemChanged(ctrl, new RoutedEventArgs());
}

public void UpdateDate()
{
if (SelectedDate.HasValue)
{
UpdateValues(SelectedDate.Value.Year, SelectedDate.Value.Month);

if (AllowNull)
{
Day.SelectedIndex = SelectedDate.Value.Day;
Month.SelectedIndex = SelectedDate.Value.Month;
Year.SelectedIndex = SelectedDate.Value.Year - 2000 + 1;
}
else
{
Day.SelectedIndex = SelectedDate.Value.Day - 1;
Month.SelectedIndex = SelectedDate.Value.Month - 1;
Year.SelectedIndex = SelectedDate.Value.Year - 2000;
}
}
else
{
UpdateValues(0, 0);
Day.SelectedIndex = 0;
Month.SelectedIndex = 0;
Year.SelectedIndex = 0;
}
}

public void UpdateValues(int year, int month)
{
var days = new List<string>();
if (AllowNull)
days.Add(" ");
for (var i = 1; i <= 31; i++)//(year != 0 && month != 0 ? DateTime.DaysInMonth(year, month) : 31); i++)
days.Add(i.ToString());

var months = new List<string>();
if (AllowNull)
months.Add(" ");
for (var i = 1; i <= 12; i++)
months.Add(i.ToString());

var years = new List<string>();
if (AllowNull)
years.Add(" ");
for (var i = 2000; i <= 2020; i++)
years.Add(i.ToString());

if (Month.SelectedIndex > months.Count - 1)
Month.SelectedIndex = months.Count - 1;

Day.ItemsSource = days;
Month.ItemsSource = months;
Year.ItemsSource = years;
}

private void Day_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (initializing)
return;

var hour = SelectedDate != null ? SelectedDate.Value.Hour : 0;
var minute = SelectedDate != null ? SelectedDate.Value.Minute : 0;
var second = SelectedDate != null ? SelectedDate.Value.Second : 0;

initializing = true;
if (AllowNull && (Day.SelectedIndex == 0 || Month.SelectedIndex == 0 || Year.SelectedIndex == 0))
SelectedDate = null;
else
{
if (AllowNull)
SelectedDate = new DateTime(Year.SelectedIndex + 2000 - 1, Month.SelectedIndex, Day.SelectedIndex, hour, minute, second);
else
SelectedDate = new DateTime(Year.SelectedIndex + 2000, Month.SelectedIndex + 1, Day.SelectedIndex + 1, hour, minute, second);
}

//if (SelectedItem.HasValue)
// UpdateValues(SelectedItem.Value.Year, SelectedItem.Value.Month);
//else
// UpdateValues(0, 0);

initializing = false;
}
}
}

关于xaml - C#/XAML Metro 应用程序中的 DatePicker 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12576452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com