C# 如何确定按钮是由用户单击还是由代码单击?
我试图按如下方式触发C# 如何确定按钮是由用户单击还是由代码单击?,c#,wpf,C#,Wpf,我试图按如下方式触发单击事件: bool m=false; private void button1_Click(object sender, RoutedEventArgs e) { MessageBox.Show("button1 clicke!"); button1.Tag = "system"; ButtonAutomationPeer peer = new ButtonAutomationPeer(button1);
单击事件
:
bool m=false;
private void button1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("button1 clicke!");
button1.Tag = "system";
ButtonAutomationPeer peer = new ButtonAutomationPeer(button1);
IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
if (m==false)
for (int i = 0; i < 2; i++)
{
invokeProv.Invoke();
m = true;
}
}
bool m=false;
私有无效按钮1\u单击(对象发送者,路由目标)
{
显示(“按钮1点击!”);
按钮1.Tag=“系统”;
ButtonAutomationPeer=新的ButtonAutomationPeer(button1);
IInvokeProvider invokeProvider=peer.GetPattern(PatternInterface.Invoke)作为IInvokeProvider;
如果(m==false)
对于(int i=0;i<2;i++)
{
invokeProv.Invoke();
m=真;
}
}
我只想显示此MessageBox
三次。它工作正常,但当我再次单击此按钮时,MessageBox
仅显示一次。请尝试以下代码:
int i = 1;
private void button1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("button1 clicked!");
ButtonAutomationPeer peer = new ButtonAutomationPeer(button1);
IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
i++;
if (i != 4)
{
invokeProv.Invoke();
}
else
{
i = 1;
}
}
XAML、WPF和UWP的设计考虑了MVVM模式。虽然您可以使用其他方法,但这样做会损失大约90%的XAMLs能力,并且每隔一点就会遇到问题。这看起来根本不像MVVM模式。几年前,我在MVVM中写了一篇介绍文章,这应该会让你开始:为不使用MVVM的人提供的调试帮助充其量是有限的然后在
内单击按钮名称的事件检查谢谢您的回答,您能在示例中解释您的解决方案吗?它应该不受来自何处(用户或代码)的影响。如果是这样,您应该为代码生成的单击创建一个不同的事件(或者只使用按钮上的公共方法来调用),并使用私有方法共享公共代码。或者您是否计划使用大量if/else构造来基于原点进行操作?这对我来说似乎是个坏主意。