WinForm 加载 WPF控件 怎么在winform里面得到控件的触发事件?

skingz 2010-10-31 09:58:42
Winform:
 private WPFButton wpfButton1;
this.elementHost2.AutoSize = true;
this.elementHost2.BackColor = System.Drawing.Color.Transparent;
this.elementHost2.ForeColor = System.Drawing.Color.Transparent;
this.elementHost2.Location = new System.Drawing.Point(110, 284);
this.elementHost2.Name = "elementHost2";
this.elementHost2.Size = new System.Drawing.Size(196, 52);
this.elementHost2.TabIndex = 3;
this.elementHost2.Text = "elementHost2";
this.elementHost2.Child = this.wpfButton1;

WPF控件貌似只能在自己那儿获取事件啊?
 <Grid Height="52" Width="196" Opacity="0.5">
<Button HorizontalAlignment="Right" Style="{DynamicResource GlassButtonStyle}" VerticalAlignment="Top" Width="190" Height="52" Content="Button" Foreground="#FFFFFFFF" Click="Button_Click" />
</Grid>
...全文
429 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
skingz 2010-11-02
  • 打赏
  • 举报
回复
恩~各位大神都OK……定义个事件就好说了~结贴~

我正在使用《Csdn收音机》第一时间获取最新动态!
LorenLiu 2010-11-01
  • 打赏
  • 举报
回复
按fangxinggood的做法应该就可以了吧,个人建议使用事件传递



public partial class WPFButton : UserControl
{
public WPFButton()
{
InitializeComponent();
}

public event EventHandler<EventArgs> WPFButtonClick;

public void Button_Click(object sender, RoutedEventArgs e)
{
EventHandler<EventArgs> handler = WPFButtonClick;
if (handler != null)
handler(sender, e);
}
}

机器人 2010-10-31
  • 打赏
  • 举报
回复
public event EventHandler Click;
机器人 2010-10-31
  • 打赏
  • 举报
回复
Winform里不能注册这个Button的Click事件?

最差最差,在Button里暴露个Event总是可以的吧。

public partial class WPFButton : UserControl
{
public WPFButton()
{
InitializeComponent();
}

public EventHandler Click;

public void Button_Click(object sender, RoutedEventArgs e)
{
if (Click != null)
Click(sender, e);
}
}

呆会我试试。
skingz 2010-10-31
  • 打赏
  • 举报
回复
大神们。。。。求助啊~
skingz 2010-10-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fangxinggood 的回复:]
DrawButton_Click 方法不是写在Winform窗体类里面吗? 方法里的this不就是winform
[/Quote]
WPFButton是自定义控件~
另外一个类
 public partial class WPFButton : UserControl
{
public WPFButton()
{
InitializeComponent();
}

public void Button_Click(object sender, RoutedEventArgs e)
{
}
}
机器人 2010-10-31
  • 打赏
  • 举报
回复
DrawButton_Click 方法不是写在Winform窗体类里面吗? 方法里的this不就是winform
skingz 2010-10-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyq11 的回复:]
<Button x:Name="DrawButton" Height="40" Width="120"
VerticalAlignment="Top"
HorizontalAlignment="Left">
Click="DrawButton_Click"
</Button>
private void DrawButton_Click(object sender, RoutedEve……
[/Quote]

这个事件还是在控件里面发生的啊~怎么返回给winform窗体?DrawButton类里面不能再申明个winform类吧?
wuyq11 2010-10-31
  • 打赏
  • 举报
回复
<Button x:Name="DrawButton" Height="40" Width="120"
VerticalAlignment="Top"
HorizontalAlignment="Left">
Click="DrawButton_Click"
</Button>
private void DrawButton_Click(object sender, RoutedEventArgs e)
{}
skingz 2010-10-31
  • 打赏
  • 举报
回复
真凄凉- -自己顶。。。。
机器人 2010-10-31
  • 打赏
  • 举报
回复
其实问题在于,你封装的是UserControl,Button只是用户控件里的一个子控件。
只要在WPF自定义控件类里,暴露这个Button就可以了。这样也不用封装Event了。

public Button WpfButton
{
get { return this.button1; }
}


Winform:

private void Form1_Load(object sender, EventArgs e)
{
//this.myWpfButton1.MyWpfButtonClick += new EventHandler(myWpfButton1_MyWpfButtonClick);
this.myWpfButton1.WpfButton.Content = "Hello";
this.myWpfButton1.WpfButton.Click += new System.Windows.RoutedEventHandler(WpfButton_Click);
}

void WpfButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
MessageBox.Show("MyWpfButton.Button.Click");
}
机器人 2010-10-31
  • 打赏
  • 举报
回复
WpfButton 代码:

public event EventHandler MyWpfButtonClick;

private void button1_Click(object sender, RoutedEventArgs e)
{
if (MyWpfButtonClick != null)
MyWpfButtonClick(sender, e);
}


使用的Form:

private void Form1_Load(object sender, EventArgs e)
{
this.myWpfButton1.MyWpfButtonClick += new EventHandler(myWpfButton1_MyWpfButtonClick);
}

void myWpfButton1_MyWpfButtonClick(object sender, EventArgs e)
{
MessageBox.Show("MyWpfButtonClick");
}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧