WPF工具包DatePicker更改默认值'show calendar'

PaN*_*1Me 10 datepicker wpftoolkit

我正在使用最新的WPF工具包,特别是DatePicker.一切正常,但是当没有提供任何值时,默认的"SHOW CALENDAR"文本出现在DatePickerTextBox中.我希望能够在WPF中更改此值.

一个告诉我下载源代码,添加一个新的Dependency属性并重新编译为dll.这很酷但是如果新版本发布会怎么样?

这就是为什么我想以这种方式模板化这个控件,我将能够覆盖这个默认字符串.知道怎么做吗?

谢谢!

PaN*_*1Me 22

好.我自己找到了解决方案.

<Style TargetType="{x:Type toolkit:DatePickerTextBox}">
    <Setter Property="Text" Value="Bitte wählen" />
</Style>
Run Code Online (Sandbox Code Playgroud)

无论如何,你必须意识到这样一个事实,即有一个名为Watermark的DependencyProperty应该被设置来代替Text.

问题是,随着最新的MS发布(大约在2009年6月),他们因为一些未知的原因而只读了这个属性.这意味着,这是我组建的唯一黑客,虽然发生了首次异常,因为DatePicker试图解析字符串(他假设文本是一个日期),但通常你不会注意到它.

另一种可能性是直接编辑从MS源代码和覆盖SetWaterMark()方法+添加自己的依赖项属性(MyWaterMark或东西).但是你不能使用提供的dll.他们说,随着.NET 4的发布,我们将会看到它.


小智 6

    void _datePicker1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
    {
        if (_datePicker1.SelectedDate != null) return;

        FieldInfo fiTextBox = typeof(DatePicker)
            .GetField("_textBox", BindingFlags.Instance | BindingFlags.NonPublic);

        if (fiTextBox != null)
        {
            DatePickerTextBox dateTextBox =
              (DatePickerTextBox)fiTextBox.GetValue(_datePicker1);

            if (dateTextBox != null)
            {
                PropertyInfo piWatermark = dateTextBox.GetType()
                  .GetProperty("Watermark", BindingFlags.Instance | BindingFlags.NonPublic);

                if (piWatermark != null)
                {
                    piWatermark.SetValue(dateTextBox, "", null);
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

你需要使用相同的代码连接Load事件.