如何在日期选择器WPF中显示默认的空值?

时间:2018-10-03 09:52:26

标签: c# wpf xaml

在我的示例中,我想在WPF的日期选择器中显示默认值,例如“ ...”。

我使用了一个后备值,但只会显示日期时间值。但是我需要一个空值,如何实现呢?

2 个答案:

答案 0 :(得分:0)

在WPF DatePicker中,默认文本“ Select a date”是作为DatePicker的子控件附加的水印。如果要显示默认文本,例如“ ...”,则必须找到“ PART_Watermark” ContentControl(它是DataPicker的子级)并更改其Content。

您可以在给定的参考链接中参考Matt Hamilton的代码:

  

http://matthamilton.net/datepicker-watermark

如果要通过单击某些Button以编程方式进行操作,请检查以下代码:-

    void ChangeDatePickerWaterMark()
    {
        var dp = datePicker as DatePicker; //datePicker is your control name
        if (dp == null) return;

        var tb = GetChildOfType<DatePickerTextBox>(dp);
        if (tb == null) return;

        var wm = tb.Template.FindName("PART_Watermark", tb) as ContentControl;
        if (wm == null) return;

        wm.Content = "...";
    }

    public static T GetChildOfType<T>(DependencyObject depObj) where T : DependencyObject
    {
        if (depObj == null) return null;

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            var child = VisualTreeHelper.GetChild(depObj, i);

            var result = (child as T) ?? GetChildOfType<T>(child);
            if (result != null) return result;
        }
        return null;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ChangeDatePickerWaterMark();
    }

答案 1 :(得分:0)

如果你只是想去除水印文字“选择日期”,你可以使用一个样式,当 Text 属性为空时,将 Opacity 属性设置为零。

<Style TargetType="{x:Type DatePickerTextBox}">
    <Style.Triggers>
        <Trigger Property="Text" Value="">
            <Setter Property="Opacity" Value="0"/>
        </Trigger>
    </Style.Triggers>
</Style>