【发布时间】:2013-10-29 20:56:37
【问题描述】:
我创建了一个看起来像磁贴的按钮模板:
当用户点击磁贴时,它会像这样展开:
问题是,当用户单击磁贴内的按钮时,会触发磁贴按钮的单击处理程序以及模板内按钮的处理程序。
一个超级简单的例子是:
XAML:
<Button Click="Outer_Click">
<StackPanel>
<TextBlock Text="Outer"
HorizontalAlignment="Center" />
<Button Click="Inner_Click"
Content="Inner" />
</StackPanel>
</Button>
C#:
private void Outer_Click(object sender, RoutedEventArgs e) {
MessageBox.Show("Outer!");
}
private void Inner_Click(object sender, RoutedEventArgs e) {
MessageBox.Show("Inner!");
}
如果用户点击了“内部”按钮,有什么方法可以不处理“外部”点击事件?
【问题讨论】:
-
你可以用
PreviewMouseLeftButtonDown代替Click然后设置e.Handled = true; -
只需在第一次出现的地方处理点击,不要让它向上传播到 VisualTree。当您完成显示消息“Inner!”时,总结一下您的内部处理程序只需设置 e.Handled = true。就是这样。
标签: c# wpf xaml templates button