解决 MaterialDesignInXamlToolkit TimePicker SelectedTimeChanged 事件
Work around for MaterialDesignInXamlToolkit TimePicker SelectedTimeChanged event
我正在使用来自 MaterialDesignInXamlToolkit 的 TimePicker。但它没有
SelectedTimeChanged
事件类似于 WPF stock 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);
}
}
}
}
您应该将控件的 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>
当您在视图中 select 一次时,将设置源 属性。
尝试使用 SelectedTime
属性 而不是 TimePicker
控件的 Text
属性。同时设置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>
我正在使用来自 MaterialDesignInXamlToolkit 的 TimePicker。但它没有
SelectedTimeChanged
事件类似于 WPF stock 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);
}
}
}
}
您应该将控件的 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>
当您在视图中 select 一次时,将设置源 属性。
尝试使用 SelectedTime
属性 而不是 TimePicker
控件的 Text
属性。同时设置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>