CheckBox 继承自 ButtonBase,它为左键按下事件 (OnMouseLeftButtonDown) 添加了一个类处理程序。正如UIElement.MouseLeftButtonDown事件的文档所提到的(强调我的):
某些控件类可能具有对鼠标按钮事件的固有类处理。鼠标左键按下事件是最有可能在控件中进行类处理的事件。类处理通常将底层 Mouse 类事件标记为已处理。一旦事件被标记为已处理,附加到该元素的其他实例处理程序通常不会被引发。任何其他依附于元素的类或实例处理程序,其冒泡方向朝向 UI 树中的根,通常也不会被引发。
您可以使用 ClickMode 并将其设置为 ClickMode.Hover,这似乎可以防止您看到的行为。但是,您可能必须在事件处理程序中为此特定实例维护自定义逻辑,以设置复选框的正确切换状态。
您也可以尝试 PreviewMouseLeftButtonDown 事件。但是,将该事件标记为在您的处理程序中已处理可能会对其余的 MouseDown 事件产生副作用 - 它们将携带已处理的信息,这将阻止其他实例处理程序,除非它们添加了带有用于处理已处理事件的标志的 AddHandler。