第2天,我没有线索。 [净3.5,VS 2008]WPF有线事件处理程序不叫
我有一个UserControl
限定ClickEvent
:
public static readonly RoutedEvent ClickEvent = EventManager.RegisterRoutedEvent (
"Click", RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TouchToggleButton));
和OnClick
方法:
protected virtual void OnClick ()
{
RaiseEvent (new RoutedEventArgs { RoutedEvent = ClickEvent, Source = this });
}
在各两个不同的窗口,我的接线将此控件的实例添加到事件处理程序中。
<wft:TouchToggleButton DockPanel.Dock="Top" x:Name="measurableButton" Click="measurableButton_Click">Cannot Measure</wft:TouchToggleButton>
和
<wft:TouchToggleButton x:FieldModifier="public" x:Name="BuyoutButton" Click="BuyoutButton_Click">Buyout</wft:TouchToggleButton>
,最后,我有两个处理程序定义:
private void measurableButton_Click (object sender, RoutedEventArgs e)
{
IsMeasurable = !IsMeasurable;
OnMeasurableButtonChanged ();
}
和
private void BuyoutButton_Click (object sender, RoutedEventArgs e)
{
IsBuyout = !IsBuyout;
OnBuyoutButtonChanged ();
}
在这两种情况下,如果我把一个断点在OnClick
,它击中。在可衡量的按钮的情况下,RaiseEvent
进入measurableButton_Click;在BuyoutButton的情况下,RaiseEvent不会去BuyoutButton_Click。
在应用程序中没有任何BuyoutButton.Click的未布线( - =)。我还需要进一步检查以发现这些行为差异的原因?
我在按钮中看到的唯一区别是有'x:FieldModifier',另一个没有。如果你删除它,它会工作吗?另外,如果您切换按钮位置,它的工作原理是否相反?我看不到完整的UserControl代码,但可能在设置第二个事件时覆盖ClickEvent,而不是创建事件的新实例。 – Rachel
删除'x:FieldModifier'不会改变行为。我无法切换按钮位置,它们位于两个完全不同的窗口中。是否有可能用'Click =“method”'语法覆盖ClickEvent? (我是WPF的新手,但不是这些仍然是多播代表?) –
我的UserControl是从另一个派生;基类定义了“公共事件RoutedEventHandler Click”。我没有意识到我必须在派生类中具有完全相同的代码(为什么它不会继承?),但是当我将事件添加到派生类时,我的问题就解决了。 –