我正在使用MaterialDesignInXamlToolkit中的TimePicker。但是它没有
SelectedTimeChanged
事件类似于WPF股票DatePicker的SelectedDateChanged
事件。
目前,我正在绑定TimePicker的文本以获取类似内容。但是问题是文本在用户选择时间之前被更新了两次。
是否有人熟悉该工具包并且知道解决方法?
XAML:
<UserControl x:Class="DateTimePickerTest.CustomDateTimePicker"
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"
xmlns:local="clr-namespace:DateTimePickerTest"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d"
d:DesignHeight="500" d:DesignWidth="600">
<Grid>
<materialDesign:TimePicker Name="timePicker" Width="100" Height="30"
Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type local:CustomDateTimePicker}},
Path=Time}">
</materialDesign:TimePicker>
</Grid>
</UserControl>
C#:
using System.Windows;
using System.Windows.Controls;
namespace DateTimePickerTest
{
public partial class CustomDateTimePicker : UserControl
{
private string _Time;
public string Time
{
get { return _Time; }
set
{
_Time = value;
TimePicked();
}
}
public CustomDateTimePicker()
{
InitializeComponent();
}
public void TimePicked()
{
if (timePicker.SelectedTime != null)
{
_Time = timePicker.SelectedTime.Value.ToString("hh:mm tt");
MessageBox.Show(_Time);
}
}
}
}
答案 0 :(得分:1)
尝试使用SelectedTime
属性而不是Text
控件的TimePicker
属性。同时设置UpdateSourceTrigger=LostFocus
。就像
<mDesign:TimePicker Name="timePicker" Width="100" Height="30"
SelectedTime="{Binding Time, RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type local:CustomDateTimePicker},
UpdateSourceTrigger=LostFocus}">
</mDesign:TimePicker>
答案 1 :(得分:0)
您应将控件的SelectedTime
属性绑定到DateTime?
源属性:
public partial class CustomDateTimePicker : UserControl
{
private DateTime? _Time;
public DateTime? Time
{
get { return _Time; }
set
{
_Time = value;
TimePicked();
}
}
public CustomDateTimePicker()
{
InitializeComponent();
}
public void TimePicked()
{
if (_Time.HasValue)
{
MessageBox.Show(_Time.Value.ToString("hh:mm tt"));
}
}
}
XAML:
<materialDesign:TimePicker Name="timePicker" Width="100" Height="30"
SelectedTime="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:CustomDateTimePicker}}, Path=Time}">
</materialDesign:TimePicker>
在视图中选择时间后,将设置source属性。