Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 另一个按钮的模板内的按钮_C#_Wpf_Xaml_Templates_Button - Fatal编程技术网

C# 另一个按钮的模板内的按钮

C# 另一个按钮的模板内的按钮,c#,wpf,xaml,templates,button,C#,Wpf,Xaml,Templates,Button,我创建了一个看起来像平铺的按钮模板: 当用户单击互动程序时,它会像这样展开: 问题是,当用户单击互动程序内的按钮时,会触发互动程序按钮的单击处理程序以及模板内按钮的处理程序 一个超级简单的例子是: XAML: 如果用户点击了“内部”按钮,有没有办法不处理“外部”点击事件?使用HighCore和dev hedgehog留下的评论,这解决了我的问题: private void Inner_Click(object sender, RoutedEventArgs e) { MessageBox

我创建了一个看起来像平铺的按钮模板:

当用户单击互动程序时,它会像这样展开:

问题是,当用户单击互动程序内的按钮时,会触发互动程序按钮的单击处理程序以及模板内按钮的处理程序

一个超级简单的例子是:

XAML:


如果用户点击了“内部”按钮,有没有办法不处理“外部”点击事件?

使用HighCore和dev hedgehog留下的评论,这解决了我的问题:

private void Inner_Click(object sender, RoutedEventArgs e) {
  MessageBox.Show("Inner!");
  e.Handled = true;
}

您可以使用
PreviewMouseLeftButtonDown
而不是
单击
,然后设置
e.Handled=true只需在单击第一次出现的位置处理它,不要让它向上传播VisualTree。要在显示消息“inner!”时在内部处理程序中进行总结,只需设置e.Handled=true。就是这样。在我的例子中,当我点击前景中的按钮时,它首先触发背景中按钮的代码。我该如何扭转局面?
private void Outer_Click(object sender, RoutedEventArgs e) {
  MessageBox.Show("Outer!");
}

private void Inner_Click(object sender, RoutedEventArgs e) {
  MessageBox.Show("Inner!");
}
private void Inner_Click(object sender, RoutedEventArgs e) {
  MessageBox.Show("Inner!");
  e.Handled = true;
}