C# WPF中的附加事件:确定按钮始终需要单击两次才能关闭
我有以下XAMLC# WPF中的附加事件:确定按钮始终需要单击两次才能关闭,c#,.net,wpf,wpf-controls,C#,.net,Wpf,Wpf Controls,我有以下XAML <Window x:Class="SimpleAttahEvent.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow"> <Grid>
<Window x:Class="SimpleAttahEvent.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow">
<Grid>
<StackPanel Margin="5" Name="stackButton" ButtonBase.Click="DoSomething">
<Button Name="cmd1" Tag="The first button"> Command 1</Button>
<Button Name="cmd2" Tag="The second button"> Command 2</Button>
<Button Name="cmd3" Tag="The third button"> Command 3</Button>
</StackPanel>
</Grid>
</Window>
…仍然需要单击两下才能关闭消息框。您的问题是处理程序加倍。您不必在同一个
OK
上单击两次;您正在单击OK,这将关闭第一条消息。然后,再次处理该事件,您会收到另一条完全相同的消息,您必须单击“确定”。如果将+DateTime.Now
添加到消息中,您将看到这确实是第二条消息
我第一眼就漏掉了这句话:
stackButton.AddHandler(Button.ClickEvent, new RoutedEventHandler(DoSomething));
这与按钮库相同。从此行单击
<StackPanel Margin="5" Name="stackButton" ButtonBase.Click="DoSomething">
选择一种方式附加到事件处理程序并坚持使用它。把它们混在一起只会引起混乱。你的问题是你的处理程序加倍了。您不必在同一个OK
上单击两次;您正在单击OK,这将关闭第一条消息。然后,再次处理该事件,您会收到另一条完全相同的消息,您必须单击“确定”。如果将+DateTime.Now
添加到消息中,您将看到这确实是第二条消息
我第一眼就漏掉了这句话:
stackButton.AddHandler(Button.ClickEvent, new RoutedEventHandler(DoSomething));
这与按钮库相同。从此行单击
<StackPanel Margin="5" Name="stackButton" ButtonBase.Click="DoSomething">
选择一种方式附加到事件处理程序并坚持使用它。把它们混在一起只会引起混乱。这对我很有效。有没有其他可能与此功能交互的代码?我只有这些。我想不出还有什么东西可以与此功能交互。在没有路由事件处理程序的情况下试试如何?只需将每个按钮中的点击处理程序定义为一个测试。这对我来说很有用。有没有其他可能与此功能交互的代码?我只有这些。我想不出还有什么东西可以与此功能交互。在没有路由事件处理程序的情况下试试如何?只需将每个按钮中的单击处理程序定义为测试。