背景を色付けするために Rectangle で StaticResource コンバーターを使用し、同時に DataTemplate 内のその隣の別のコンポーネントで MouseDown ハンドラーを使用した瞬間に発生した、非常に奇妙なエラー ケースがあります。コードを少し絞り込むと、エラーを再現するために必要なものは次のとおりです。
上部にはこれらのリソースがあり、バインディングからブール値を取得して塗りつぶしの背景色に変換するコンバーターを指しています):
<Window.Resources>
<vm:DesktopViewModel x:Key="DesktopVM" />
<vm:BooleanToColorConverter x:Key="converter" />
</Window.Resources>
その後、同じ xaml ファイルで、これを使用して Alarm オブジェクトのリストを反復処理します (グリッド レイアウトを StackPanel に置き換え、コード サンプルを短くするために他のコンポーネントをいくつか削除しましたが、以下のコード スニペットはまだ失敗します)。
<ItemsControl ItemsSource="{Binding Alarms}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Rectangle Height="20" Stroke="Black" Width="20" RadiusX="4" RadiusY="4" Fill="{Binding Alarm, Converter={StaticResource converter}}"/>
<Image Source="/MyNamespace;component/images/chart.png" Stretch="None" MouseDown="Image_MouseDown" Cursor="Hand"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
画像の MouseDown ハンドラーを削除すると、最初に nullpointer エラーが発生することなく正常に実行されます。Rectangle の Fill タグを削除すると、コードは MouseDown ハンドラーで問題なく動作します!!! (そしてハンドラーも問題なく動作します)。Fill の StaticResource 参照が何かを台無しにして、マウス ハンドラー関数の検索に失敗しているようです?!?
実行中または何かをクリックしている間ではなく、ウィンドウが作成されたときに失敗することに注意してください。
編集: コンバーターを、コンバーターと同じことを行うトリガー付きの StaticResource を使用するスタイルに置き換えた場合、同じ nullpointer の問題が発生しました。属性の StaticResource 参照が原因であることは明らかですが、イベント リスナーに影響を与える理由がわかりません。
また、コンポーネントの順序も重要ではありません。Image を Rectangle の前に配置すると、エラーはまったく同じになります。