日期选择器触发WPF

日期选择器触发WPF,wpf,triggers,datepicker,Wpf,Triggers,Datepicker,以下是错误的,但显示了我正在尝试做的事情。我有一个标签和一个日期选择器。约会时间?绑定可以为null,因此DatePicker可以接收null值 日期时间的绑定?工作正常,但是如果DatePicker具有非null值,我希望标签的前景色(在Xaml中)发生更改。我相信这是通过触发器实现的,但这是我第一次使用触发器 binding to: public DateTime? NewLeadDateActiveJob <Label Style="{StaticResource LabelS

以下是错误的,但显示了我正在尝试做的事情。我有一个标签和一个日期选择器。约会时间?绑定可以为null,因此DatePicker可以接收null值

日期时间的绑定?工作正常,但是如果DatePicker具有非null值,我希望标签的前景色(在Xaml中)发生更改。我相信这是通过触发器实现的,但这是我第一次使用触发器

binding to: public DateTime? NewLeadDateActiveJob


<Label  Style="{StaticResource LabelStyle}"  Grid.Row="11"  Content="New Lead:">
                <Label.Triggers>
                    <Trigger Property="{Binding ElementName=NewLeadDateActiveJobDatePicker, Path=HasValue}">
                        <Setter Property="Foreground" Value="HotPink"/>
                    </Trigger>
                </Label.Triggers>
            </Label>
<DatePicker x:Name="NewLeadDateActiveJobDatePicker" Grid.Row="11" Margin="3" HorizontalAlignment="Left" Grid.Column="1"
                        SelectedDate="{Binding objActiveJobClass.NewLeadDateActiveJob, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" 
                        Style="{StaticResource DatePickerStyle}" 
                        CalendarStyle="{StaticResource styleCalendar}">
            </DatePicker> 
绑定到:公共日期时间?NewLeadDateActiveJob

我用IValueConverter解决了这个问题,但我很想知道是否有更好的方法

public class NullableDateTimeToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || value.ToString() == string.Empty)
        {
            return "Gray";
        }

        DateTime? dateTime = value as DateTime?;
        if (dateTime == null)
        {
            return "Gray";
        }

        return "Green";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

您可以使用DataTriggers执行此操作,当然不需要转换器:

<Label Grid.Row="11"  Content="New Lead:">
    <Label.Style>
        <Style TargetType="{x:Type Label}" BasedOn="{StaticResource LabelStyle}">
            <Setter Property="Foreground" Value="Green" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=NewLeadDateActiveJobDatePicker, Path=SelectedDate}" Value="{x:Null}">
                    <Setter Property="Foreground"  Value="Gray" />
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=NewLeadDateActiveJobDatePicker, Path=SelectedDate}" Value="">
                    <Setter Property="Foreground"  Value="Gray" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Label.Style>
</Label>