我使用表格已有一段时间,目前正在学习编写WPF应用程序的代码。我有一个简单的问题,但似乎在任何地方都找不到答案。
创建事件时是否可以自动生成'private void eventName(...'代码?
例如,如果我创建一个带有简单按钮和代码的WPF表单:
Button x:Name =“ mButton” Content =“ Hello” Click =“ mClick” /
是否有让私有void事件处理程序创建自身的技巧?因为现在,我要么手动编写它,要么在事件处理程序属性选项卡中双击。在widowsForm中,我只需双击即可创建自己。这对于1或2来说不是什么大问题,但是如果我想创建多个按钮,可能会变得很乏味。
我很抱歉这个问题看起来很明显
如果要执行此操作而不是使用数据绑定/命令模式,则可以在Visual Studio中使用XAML设计器。如果您开始输入Click="
,则系统会提示您可能的事件处理程序列表或一个新的事件处理程序-选择一个并按Tab将在后面的代码中为您创建事件处理程序(您可能要重命名它,或确保对其进行重命名您先在XAML中为按钮命名)。
当然,越自动化和越懒惰越好。所以有一些提示:
您可以生成任何这样的书面事件处理程序:
"mClick"
),然后选择转到定义或
"mClick"
,然后按F12(或转到定义的任何快捷键)如果您不希望控件包含事件处理程序的任何代码,例如:
<Button /> // handles the click event magically
然后您可以将其添加到所有按钮的容器中:
<Container.Resources>
<Style TargetType="Button">
<EventSetter Event="Click" Handler="mClick"/>
</Style>
</Container.Resources>
(显然,我认为容器的名称是Container
。在您的情况下,它可能是Window
或Menu
等。] >>
现在,此容器内的每个按钮都有由相同的处理程序处理的Click
,您可以在其中将逻辑重定向到正确的方法:
Dictionary<string, Action> dic; private void mClick(object sender, RoutedEventArgs e) { dic[(sender as Button).Name](); }
与MVVM模式相比,这些仍然很繁琐:
<ItemsControl ItemsSource="{Binding myButtons}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding ButtonText}" Command="{Binding ButtonAction}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>