我用一些按钮和事件编写了我自己的控件 - 这就像一个魅力。然后我动态地将这些控件作为一个孩子放在StackPanel
的其他类中。我怎么能在这个班级(StackPanel
)从我的自定义控件中获取事件 - 我的用户控件中有一个公共事件 - 我怎样才能从StackPanel
类处理它?</ p>
我正在尝试写一些类似的东西:
public event EventHandler<ThumbnailEventArgs> ThumbnailClick
{
add { AddHandler(ThumbnailClickEventRouted, value); }
remove { RemoveHandler(ThumbnailClickEventRouted, value); }
}
public static RoutedEvent ThumbnailClickEventRouted;
让public ThumbnailClick
路由,但无效。
答案 0 :(得分:0)
修改:您需要raise the event,read the overview。
如果您的活动是公开的,您应该可以从几乎任何地方订阅它:
在XAML中:
<StackPanel>
<local:MyControl MyEvent="MyControl_OnMyEvent"/>
在相应的*.xaml.cs
:
private void MyControl_OnMyEvent(object sender, EventArgs e)
{
//Handler logic here
}
根据需要更改参数的类型。
如果活动为routed,您还可以在StackPanel
上订阅:
<StackPanel local:MyControl.MyEvent="MyControl_OnMyEvent">
这使您可以在一个地方处理所有MyControl
个孩子的事件,而无需为每个实例添加处理程序。
答案 1 :(得分:0)
您的路由事件应该冒出来,所以只需在堆叠面板上捕获它。确保在注册路由事件时选择RoutingStrategy.Bubble
MainWiindow
<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();
}
}
UserControl1中的一些代码是从Microsoft docutments ...
处理的