【问题标题】:DatePicker Triggers WPFDatePicker 触发器 WPF
【发布时间】:2018-07-10 21:36:04
【问题描述】:

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

日期时间的绑定?工作正常,但如果 DatePicker 具有非空值,我希望标签的前景色改变(在 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> 

【问题讨论】:

    标签: wpf triggers datepicker


    【解决方案1】:

    我用 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();
        }
    }
    

    【讨论】:

      【解决方案2】:

      你可以用 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>
      

      【讨论】:

        猜你喜欢
        • 2014-09-29
        • 2019-10-09
        • 1970-01-01
        • 2013-02-21
        • 2015-12-27
        • 2016-03-12
        • 2013-02-16
        • 2010-10-15
        • 2011-05-19
        相关资源
        最近更新 更多