【发布时间】:2020-04-10 20:46:06
【问题描述】:
我在一个窗口中有很多控件,包括复选框和组合框。我想跟踪 CheckBox.IsChecked 事件,所以我在 Windows 级别定义了一个事件处理程序为
<Grid CheckBox.Checked="OnModified" CheckBox.Unchecked="OnModified">
问题是 ComboBox 在鼠标单击项目后也会立即触发相同的事件。我认为我的事件处理程序应该只捕获 CheckBox 的 Checked 事件,而不是 ToggleButton 的。我错过了什么吗?
编辑: 正如我在下面所指出的,我认为它会以这种方式工作,因为我阅读了 Matthew MacDonald 的书“Pro WPF in C# 2010”。 在第164页,他先给出了这个示例代码:
<StackPanel Button.Click="DoSomething" Margin="5">
<Button Name="cmd1">Command 1</Button>
<Button Name="cmd2">Command 2</Button>
<Button Name="cmd3">Command 3</Button>
...
</StackPanel>
然后,他特别注明:
注意 Click 事件实际上是 在 ButtonBase 类中定义和 由 Button 类继承。如果你 将事件处理程序附加到 ButtonBase.Click,那个事件处理程序 将在任何时候使用 ButtonBase 派生控件被单击 (包括Button、RadioButton、 和 CheckBox 类)。如果你附上 Button.Click 的事件处理程序, 它仅用于 Button 对象。
现在,是我误解了他,还是他的笔记错了?
【问题讨论】:
-
您的事件处理程序是如何“附加”的?一些代码会很好!
-
好的,我编辑了问题以包含一些代码。
标签: wpf combobox checkbox routedevent