我在Xceed.Wpf.Toolkit.dll中发生'System.NullReferenceException',异常,在堆栈位置Xceed.Wpf.Toolkit.Core.Primitives.DateTimeUpDownBase`1.OnPreviewKeyDown()。
当我以有效格式输入日期并按Enter键时会发生这种情况。
我已经看到一些与此类似的文档错误,但是由于Xceed.Wpf.Toolkit v1.9错误并且已经修复。我正在使用v2.2。 下面是我所讨论的DateTimePicker的xaml。
<Grid DockPanel.Dock="Left">
<xctk:DateTimePicker
BorderThickness="0"
Format="Custom"
FormatString="{lex:LocText MAIN.Localization:Filters:DateRangeFilterFormatString}"
HorizontalAlignment="Right"
HorizontalContentAlignment="Stretch"
Margin="0,0,1,0"
ShowButtonSpinner="False"
TimePickerVisibility="Hidden"
Value="{Binding MinimumDate, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center"
Keyboard.PreviewKeyDown="keyDownEventHandler"
Watermark="{lex:LocText MAIN.Localization:Filters:DateRangeFilterWatermark}"
Width="100"/>
</Grid>
编辑:
我实际上不希望enter keypress在这个控件上做任何事情,所以我试图抓住这个事件。我在上面的代码中添加了一个键盘事件。我在输入日期时会捕捉到这些事件,但是当我按下回车键时,错误就会发生,甚至会在它触及回车键事件之前发生。
答案 0 :(得分:1)
为了记录,我用OP工作,我们弄清楚了。只是想回答这个问题以防其他人遇到这个问题。
DateTimePicker
的默认控件模板中包含WatermarkTextBox
(PART_TextBox
),表示底层文本区域。在OnPreviewKeyDown
基类的DateTimePicker
处理程序中,代码在&#34; Text&#34;上查找绑定。该文本框的属性,如下所示:
BindingExpression binding = BindingOperations.GetBindingExpression( TextBox, System.Windows.Controls.TextBox.TextProperty );
binding.UpdateSource();
在我们的自定义模板中,我们未设置Text
的{{1}}属性,因此上述代码中的WatermarkTextBox
为空。
我们通过在自定义binding
模板中添加PART_TextBox
的Text属性的绑定来修复它,所以现在它看起来像这样:
DateTimePicker