我有以下代码:
<CheckBox Name="MinDateCheck"></CheckBox>
<DatePicker IsEnabled="{Binding ElementName=MinDateCheck, Path=IsChecked}">
<DatePicker.Style>
<Style TargetType="{x:Type DatePicker}">
<Setter Property="SelectedDate" Value="{Binding MinDate}" />
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="SelectedDate" Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
</DatePicker.Style>
</DatePicker>
其中MinDate
是DateTime?
类型的属性。
我的问题是IsEnabled
触发器无法正常工作。当MinDate
被禁用时,基础DatePicker
字段不会更改为null。
这可能吗?我可以通过引入另一个名为IsMinDateEnabled
的支持字段来实现我需要的效果,但是如果可能的话我宁愿避免这种情况。
答案 0 :(得分:1)
<Style TargetType="{x:Type DatePicker}">
<Setter Property="SelectedDate" Value="{Binding MinDate}" />
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="SelectedDate" Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
Try to set IsEnabled default value.Some times it works.Try it once.
答案 1 :(得分:1)
可能有更简单的解决方案。但它的确有效。
<CheckBox Name="MinDateCheck" IsChecked="{Binding MinDate, Converter={StaticResource DateTimeConverter}, Mode=OneWayToSource}"></CheckBox>
<DatePicker IsEnabled="{Binding ElementName=MinDateCheck, Path=IsChecked}"
SelectedDate="{Binding MinDate}">
<DatePicker.Style>
<Style TargetType="{x:Type DatePicker}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="SelectedDate" Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
</DatePicker.Style>
</DatePicker>
class DateTimeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(bool)value)
{
return null;
}
else
{
return DependencyProperty.UnsetValue;
}
}
}