NullReference on输入键在datecePicker中的Xceed.Wpf.Toolkit内按下

时间:2014-07-30 14:24:10

标签: c# wpf xaml xceed

我在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在这个控件上做任何事情,所以我试图抓住这个事件。我在上面的代码中添加了一个键盘事件。我在输入日期时会捕捉到这些事件,但是当我按下回车键时,错误就会发生,甚至会在它触及回车键事件之前发生。

1 个答案:

答案 0 :(得分:1)

为了记录,我用OP工作,我们弄清楚了。只是想回答这个问题以防其他人遇到这个问题。

DateTimePicker的默认控件模板中包含WatermarkTextBoxPART_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