1. VS菜鸟请教WPF编程中按钮事件的问题:Click和Click_1
出现 XXX_Click_1 的原因:
在设计器上点击按钮自动生成了 XXX_Click 函数,因某个操作 (删除控件后再次添加) 导致 XAML 中 Click="XXX_Click" 代码丢失,然后再次点击按钮而自动生成的。
解决办法很简单,在 XAML 代码编辑器中找到 XXX 然后将 Click="XXX_Click_1" 改成 "XXX_Click" 就可以了。也就是说,可以先定义事件处理函数,然后再为一个或多个控件指定。
RoutedEventArgs 和 EventArgs 不能随意替换。
Route 的意思就是路由,在 WPF 中引入了事件路由这一概念,举个例子比较好理解一点:
窗口中有一系列的控件 Grid\StackPanel\Button 等,
在 WinForm 中:当 Button 的 MouseMove 事件被触发时,其父级控件 (StackPanel、Grid、Form) 是不会触发 MouseMove 事件的。
WPF 中:会因路由概念的引入,导致 Button 的所有父级控件触发 MouseMove 事件,当然,前提是在代码中指定了事件函数。
所以,我们需要 RoutedEventArgs 这个参数,从 e.Source、e.OriginalSource 来确定该事件是由哪个子控件触发的。由于 WPF 控件是由 ControlTemplate 定义的,所以,单个控件也会需要事件路由来确定,该控件的模板中哪个元素引发了事件,从而精确处理控件事件。
2. 什么时候使用事件和命令为WPF / MVVM
利用View里的IsEnable属性。 原理是这样的: 1、UI中的IsEnabled绑定VM中的属性 2、UI的后台代码中,注册IsEnableChange事件,在这个事件里,检测到传过来的值满足某个条件,即可触发Close()命令
3. wpf命令的好处,直接用方法不行吗搞的跟dos一样,感觉很奇特
wpf的命令用于那种需要主动询问的情况。比如,用户输入账户密码后登录按钮处于可用状态。传统的方式得用textChange事件来做。命令则不需要,命令让textbox主动发送状态来控制登录按钮的状态。是一种状态直接到状态的方式。
说到底,WPF的命令给了你除了方法以外的多的一个选择。