【问题标题】:Button inside template of another button另一个按钮的模板内的按钮
【发布时间】: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


【解决方案1】:

使用 HighCore 和 dev Hedgehog 留下的 cmets,这解决了我的问题:

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

【讨论】:

  • 在我的情况下,当我单击前台中的按钮时,它首先会触发后台按钮的代码。我该如何扭转局面?
猜你喜欢
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2022-07-16
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多