Wpf 自定义日期选择器用户控件 [英] Wpf custom datepicker user control
问题描述
我想创建一个用户控件来从用户那里获取日期.它应该有三个文本框,一个表示年、月和日.我不知道如何创建它.
I want to create a user control for getting a date from the user. It should have three textboxes, one for year, month and day. I don't know how to create it.
<UserControl x:Class="UI.WPF.CustomControls.ChooseDateControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
x:Name="chooseDateControl"
xmlns:custom="clr-namespace:UI.WPF.CustomControls"
d:DesignHeight="26" d:DesignWidth="181" FontFamily="Tahoma">
<DockPanel LastChildFill="True">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.5*" />
<ColumnDefinition Width="14" />
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="14" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Label Content="/" Grid.Column="1" />
<Label Content="/" Grid.Column="3" />
<custom:NumericTextBox x:Name="txtYear" ToolTip="سال" Text="{Binding ElementName=chooseDateControl, Mode=TwoWay, Path=Year}" MaxLength="4" TabIndex="2" MinWidth="20" />
<custom:NumericTextBox x:Name="txtMonth" Grid.Column="2" ToolTip="ماه" Text="{Binding ElementName=chooseDateControl, Mode=TwoWay, Path=Month}" MaxLength="2" TabIndex="1" MinWidth="20" />
<custom:NumericTextBox x:Name="txtDay" Grid.Column="4" ToolTip="روز" Text="{Binding ElementName=chooseDateControl, Mode=TwoWay, Path=Day}" MaxLength="2" TabIndex="0" MinWidth="20" />
</Grid>
</DockPanel>
背后的代码
public partial class ChooseDateControl : UserControl
{
public static readonly DependencyProperty ValueProperty;
public static readonly DependencyProperty YearProperty;
public static readonly DependencyProperty MonthProperty;
public static readonly DependencyProperty DayProperty;
static ChooseDateControl()
{
ValueProperty = DependencyProperty.Register(
"Value",
typeof(DateTime), typeof(ChooseDateControl),
new FrameworkPropertyMetadata(DateTime.MinValue));
ValueProperty = DependencyProperty.Register(
"Year",
typeof(int), typeof(ChooseDateControl),
new FrameworkPropertyMetadata((int)0));
ValueProperty = DependencyProperty.Register(
"Month",
typeof(int), typeof(ChooseDateControl),
new FrameworkPropertyMetadata((int)0));
ValueProperty = DependencyProperty.Register(
"Day",
typeof(int), typeof(ChooseDateControl),
new FrameworkPropertyMetadata((int)0));
}
public ChooseDateControl()
{
InitializeComponent();
}
public DateTime Value
{
get
{
return (DateTime)base.GetValue(ValueProperty);
}
set
{
base.SetValue(ValueProperty, value);
}
}
public int Year
{
get
{
return (int)base.GetValue(YearProperty);
}
set
{
base.SetValue(YearProperty, value);
}
}
public int Month
{
get
{
return (int)base.GetValue(MonthProperty);
}
set
{
base.SetValue(MonthProperty, value);
}
}
public int Day
{
get
{
return (int)base.GetValue(DayProperty);
}
set
{
base.SetValue(DayProperty, value);
}
}
}
它不能正常工作——它返回默认值,即 DateTime.MinValue.请帮帮我.
It doesn't work correctly-- it returns the default value, which is DateTime.MinValue. Please help me.
推荐答案
像这样编写逻辑可能会更好:
It might be better writing the logic kind of like this:
static void Main(string[] args)
{
Console.WriteLine("Year");
var year = Int32.Parse(Console.ReadLine());
Console.WriteLine("Month");
var month = Int32.Parse(Console.ReadLine());
Console.WriteLine("Day");
var day = Int32.Parse(Console.ReadLine());
var customDate = new DateTime(year, month, day);
Console.WriteLine(customDate);
Console.ReadLine();
}
您可以实现类似的功能,例如拥有一个按钮,按下该按钮时将获取值并创建新的日期时间值.有很多方法可以从输入值生成 DateTime,只需在网上冲浪,您就会在 WPF 中找到大量关于此的示例和教程.希望这会给你一些想法并帮助你.
You could implement something similar like having a button that when pressed will get the values and create a new datetime value. There are many ways of generating a DateTime from input values just surf the web and you will find a ton of examples and tutorials about this in WPF. Hopefully this will give you some idea's and help you out.
这篇关于Wpf 自定义日期选择器用户控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!