wpf处理事件
我用一些按钮和事件编写了我自己的控件,这就像一个符咒。然后,我将此控件作为子控件动态放置在另一个类的wpf处理事件,wpf,events,Wpf,Events,我用一些按钮和事件编写了我自己的控件,这就像一个符咒。然后,我将此控件作为子控件动态放置在另一个类的StackPanel中。在这个类中(使用StackPanel)如何从自定义控件获取事件-我的用户控件中有一个公共事件-如何从StackPanel类处理它 我试着写一些东西,比如: public event EventHandler<ThumbnailEventArgs> ThumbnailClick { add { AddHandler(ThumbnailC
StackPanel
中。在这个类中(使用StackPanel
)如何从自定义控件获取事件-我的用户控件中有一个公共事件-如何从StackPanel
类处理它
我试着写一些东西,比如:
public event EventHandler<ThumbnailEventArgs> ThumbnailClick
{
add { AddHandler(ThumbnailClickEventRouted, value); }
remove { RemoveHandler(ThumbnailClickEventRouted, value); }
}
public static RoutedEvent ThumbnailClickEventRouted;
公共事件事件处理程序缩略图单击
{
添加{AddHandler(ThumbnailClickEventRouted,value);}
移除{RemoveHandler(ThumbnailClickEventRouted,值);}
}
公共静态路由事件缩略图ClickEventRouted;
若要使我的
公用缩略图,请单击“路由”,但它不工作。编辑:您也需要这样做
如果您的活动是公开的,您应该可以在几乎任何地方订阅:
在XAML中:
<StackPanel>
<local:MyControl MyEvent="MyControl_OnMyEvent"/>
根据需要更改参数的类型
如果事件已启动,您也可以在StackPanel
上订阅它:
<StackPanel local:MyControl.MyEvent="MyControl_OnMyEvent">
这允许您在一个位置处理所有MyControl子对象的事件,而无需将处理程序添加到每个实例。
您的routed事件应该会出现气泡,因此只需在stackpanel中捕捉它即可。请确保在注册路由事件时选择RoutingStrategy.Bubble
缅因州
<StackPanel local:UserControl1.Tap="Grid_Tap" >
<local:UserControl1 Width="120"></local:UserControl1>
</StackPanel>
UserControl1中的一些代码来自Microsoft文档…我正在以友好方式添加此控件。我写不出我所拥有的一切。StackPanel上没有MyEvent属性我正在尝试路由我的事件,但有些不好(@PapaJohn:您阅读了概述吗?您是否使用相应的方法引发了事件(请参见编辑)?我正在我的单选按钮选中:private void单选按钮选中(对象发送方,RoutedEventArgs e){if(ThumbnailClick!=null){ThumbnailClick(sender,new ThumbnailEventArgs(){ImageSource=this.tagas ImageSource});}@PapaJohn:这不是正确的方法,路由事件需要使用方法引发,再次阅读编辑中的链接。感谢您提供清晰的解决方案。我忘记了(由于12小时工作日={)在XAML元素中设置它-因此出现了一些错误/
<StackPanel local:UserControl1.Tap="Grid_Tap" >
<local:UserControl1 Width="120"></local:UserControl1>
</StackPanel>
<Grid>
<Button Click="Button_Click">Tap Me</Button>
</Grid>
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
// Create a custom routed event by first registering a RoutedEventID
// This event uses the bubbling routing strategy
public static readonly RoutedEvent TapEvent = EventManager.RegisterRoutedEvent(
"Tap", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(UserControl1));
// Provide CLR accessors for the event
public event RoutedEventHandler Tap
{
add { AddHandler(TapEvent, value); }
remove { RemoveHandler(TapEvent, value); }
}
// This method raises the Tap event
void RaiseTapEvent()
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(UserControl1.TapEvent);
RaiseEvent(newEventArgs);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
RaiseTapEvent();
}
}