【发布时间】:2017-11-01 04:15:22
【问题描述】:
我正在尝试将每个事件处理程序从一个控件复制到另一个(相同类型)。 我发现了几个使用 Winform 的示例,但 WPF 没有...
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<StackPanel x:Name="panel">
<Button x:Name="btn1"
Content="Button 01"/>
</StackPanel>
</Window>
using System;
using System.Windows;
using System.Windows.Controls;
namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
btn1.Click += (s, e) => Console.WriteLine("Button pressed");
AddButton();
}
private void AddButton()
{
Button btn2 = new Button() { Content = "Button 02" };
panel.Children.Add(btn2);
// Copy all event handler from btn1 to btn2 ??
}
}
}
问题是我无权访问任何处理程序方法名称,因为我想从另一个类复制事件处理程序...
【问题讨论】:
-
“将每个事件处理程序从一个控件复制到另一个控件(相同类型)”是什么意思?你想让
btn1点击处理程序也处理btn2的点击事件吗? -
events 是一个 C# 概念,独立于 UI 框架。如果您找到了使用System.Windows.Forms.Button类执行此操作的代码,为什么不能使用System.Windows.Controls.Button类? -
我需要的是最终会产生类似的东西:
btn2.Click += (s, e) => Console.WriteLine("Button pressed");或任何其他可能已分配给 btn1 的事件处理程序,而不仅仅是 ClickEvent -
您仍然没有回答问题:“使用 Winform 执行的几个示例 [a]mple[s] 有什么问题”? wpf 和 winforms 订阅事件的方式没有区别。
-
我试过这个帖子:link 这似乎正是我想要的,但无法使其适用于 WPF...
标签: c# wpf reflection