사용자로부터 날짜를 가져 오는 사용자 정의 컨트롤을 만들고 싶습니다. 그것은 세 개의 텍스트 상자가 있어야합니다. 하나는 년, 월, 일입니다. 나는 그것을 만드는 법을 모른다. 이 DateTime.MinValue 인 디폴트 값을 반환 correctly--Wpf 사용자 정의 날짜 피커 사용자 정의 컨트롤
<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);
}
}
}
뒤에 그것은 작동하지 않습니다. 도와주세요.
재산 등록을 수정해야합니다. 모든 것을 ValueProperty에 등록합니다. YearProperty, MonthyProperty 등을 설정하도록 변경하십시오. –
값을 설정하는 논리에는 몇 가지 문제가 있습니다. 하나는 Value 속성을 설정하지 않습니다. 확장 WPF 툴킷의 DatTimeUpDown 컨트롤을보고 어떻게 처리되는지 확인할 수 있습니다. http://wpftoolkit.codeplex.com/ –
Value 속성을 사용하는 속성으로 사용하려는 경우 데이터 바인딩. 즉, 다른 속성 값을 설정하기 위해 Value 속성의 변경된 호출 basck 속성을 처리해야합니다. 다른 속성 콜백에서는 새 D/M/Y 조합을 사용하여 Value 속성을 설정하려고 할 것입니다. –