如何在WPF中自动生成代码,C#?

问题描述 投票:0回答:2

我使用表格已有一段时间,目前正在学习编写WPF应用程序的代码。我有一个简单的问题,但似乎在任何地方都找不到答案。

创建事件时是否可以自动生成'private void eventName(...'代码?

例如,如果我创建一个带有简单按钮和代码的WPF表单:

Button x:Name =“ mButton” Content =“ Hello” Click =“ mClick” /

是否有让私有void事件处理程序创建自身的技巧?因为现在,我要么手动编写它,要么在事件处理程序属性选项卡中双击。在widowsForm中,我只需双击即可创建自己。这对于1或2来说不是什么大问题,但是如果我想创建多个按钮,可能会变得很乏味。

我很抱歉这个问题看起来很明显

c# wpf xaml
2个回答
1
投票

如果要执行此操作而不是使用数据绑定/命令模式,则可以在Visual Studio中使用XAML设计器。如果您开始输入Click=",则系统会提示您可能的事件处理程序列表或一个新的事件处理程序-选择一个并按Tab将在后面的代码中为您创建事件处理程序(您可能要重命名它,或确保对其进行重命名您先在XAML中为按钮命名)。


0
投票

当然,越自动化和越懒惰越好。所以有一些提示:

您可以生成任何这样的书面事件处理程序:

  • 右键单击处理程序的名称("mClick"),然后选择转到定义

  • 将光标置于"mClick",然后按F12(或转到定义的任何快捷键)

如果您不希望控件包含事件处理程序的任何代码,例如:

 <Button /> // handles the click event magically

然后您可以将其添加到所有按钮的容器中:

<Container.Resources>
    <Style TargetType="Button">
        <EventSetter Event="Click" Handler="mClick"/>
    </Style>
</Container.Resources>

(显然,我认为容器的名称是Container。在您的情况下,它可能是WindowMenu等。] >>

现在,此容器内的每个按钮都有由相同的处理程序处理的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>
© www.soinside.com 2019 - 2024. All rights reserved.