1

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キーを押してこのコントロールで何かをしたくないので、イベントをキャッチしようとしています。上記のコードにキーボード イベントを追加しました。日付を入力するとイベントがキャッチされますが、Enterキーを押すと、Enterキーイベントをキャッチする前にエラーが発生します。

4

1 に答える 1

1

記録のために、私は OP で作業しており、私たちはそれを理解しました。他の人が遭遇した場合に備えて、質問に答えたいだけです。

DateTimePicker既定のコントロール テンプレートには、下にあるテキスト領域を表すWatermarkTextBox( ) があります。PART_TextBoxの基本クラスのOnPreviewKeyDownハンドラーでDateTimePicker、コードは次のように、そのテキスト ボックスの "Text" 属性のバインディングを探します。

BindingExpression binding = BindingOperations.GetBindingExpression( TextBox, System.Windows.Controls.TextBox.TextProperty );
binding.UpdateSource();

カスタム テンプレートでは、 のText属性を設定していないため、上記のコードでは nullWatermarkTextBoxを意味していました。binding

PART_TextBoxカスタムテンプレートの Text 属性にバインドを追加して修正したDateTimePickerため、次のようになりました。

<xctk:WatermarkTextBox x:Name="PART_TextBox" 
                       Background="Transparent" 
                       BorderBrush="Transparent" 
                       Grid.Column="0" 
                       HorizontalAlignment="Stretch" 
                       VerticalAlignment="Center" 
                       TextWrapping="NoWrap" 
                       Watermark="{TemplateBinding Watermark}"
                       Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}"/>
于 2014-07-30T17:47:28.943 に答える