第2天,我没有任何线索。 [.Net 3.5,VS 2008]
我有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
处放置一个断点,它就会命中。在measurableButton的情况下,RaiseEvent
转到measurableButton_Click;在BuyoutButton的情况下,RaiseEvent不会去BuyoutButton_Click。
在应用程序中没有任何地方可以看到BuyoutButton.Click的无线( - =)。还有什么可以检查以发现这些行为不同的原因?
答案 0 :(得分:1)
感谢Rachel让我想起这件事,我意识到我已经遗漏了
public event RoutedEventHandler Click
{
add { AddHandler ( ClickEvent, value ); }
remove { RemoveHandler ( ClickEvent, value ); }
}
在我继承的课程中。 (作为一个事件,它不会继承。)这解决了我的问题,虽然我仍然想知道它是如何起作用的。
答案 1 :(得分:0)
我知道这并不能帮助你理解如何做你所要求的事情,但无论如何我都有一个建议,以防这是一个XYZ问题。
仅仅通过查看您正在做的事情,即使用或多或少的Button自定义实现来切换布尔值,我建议使用ToggleButton
代替。这将是一种更为WPF的方式。
这样状态在UI中是清楚的,你不必连接逻辑,为你处理切换,你可以绑定到IsChecked
值!
无论如何,我的两分钱值得。