我是 WPF/XAML 的新手,所以请耐心等待菜鸟问题。
我设计了一个控制面板,最终将用作我网站的后端,并且刚刚使用 TabControl 元素完成了选项卡中所有按钮的布局。 (这是使用 Visual Studio“窗口”窗体设计的。
我的问题是,是否可以在 xaml.cs 文件中创建一个函数来动态处理所有按钮元素的特定事件?例如……
我有 30 多个按钮,不想要 30 个不同的 Click="btnCustomers_click"+ 它们在 C# 代码中的各自函数。我想要的是说一个功能,它允许我单击任何按钮,然后根据选择的按钮打开一个新窗口。
下面的代码是我目前的设计,但是对于 30 多个按钮,它们将有很多功能并且会很困惑,因此我希望有一个功能可以根据单击哪个按钮来控制打开哪个窗口。
private void btnMerchants_click(object sender, RoutedEventArgs e)
{
var newWindow = new frmMerchants();
newWindow.Show();
}
提前感谢您提供的任何建议!! :)
最佳答案
你可以为此使用样式:
<Style TargetType="{x:Type Button}">
<EventSetter Event="Click" Handler="btnMerchants_click"/>
</Style>
如果您在没有x:Key
的资源中设置它,它将应用于所有按钮。
例如如果您有一个 Grid 并且您希望将某种样式应用于其中的所有 Button,您可以这样定义它:
<Grid>
<Grid.Resources>
<Style TargetType="{x:Type Button}">
<EventSetter Event="Click" Handler="Button_Click"/>
</Style>
</Grid.Resources>
<Grid.Children>
<!-- Buttons and stuff -->
</Grid.Children>
</Grid>
如果您只想将它应用到某些按钮,请设置 x:Key
并引用样式:
<Grid>
<Grid.Resources>
<Style x:Key="AttachClickHandlerStyle" TargetType="{x:Type Button}">
<EventSetter Event="Click" Handler="Button_Click"/>
</Style>
</Grid.Resources>
<Grid.Children>
<Button Content="Click me!" Style="{StaticResource AttachClickHandlerStyle}"/>
<Button Content="Click me, too!" Style="{StaticResource AttachClickHandlerStyle}"/>
<Button Content="Something different." Click="SomeOtherButton_Click"/>
</Grid.Children>
</Grid>
一般来说,您应该将多次出现的任何属性重构为一个样式,以防止重复代码。
此外,由于您是初学者,可能会对以下文章感兴趣:
关于c# - 是否可以动态地将事件添加到 XAML 中的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5726732/