WPF Проводной обработчик событий не вызывается - PullRequest
0 голосов
/ 11 октября 2011

День 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, она попадает.В случае measureableButton, RaiseEvent переходит к measureurableButton_Click;в случае BuyoutButton RaiseEvent НЕ переходит к BuyoutButton_Click.

В приложении нигде нет ни единой разводки (- =) BuyoutButton.Click.Что еще я могу проверить, чтобы выяснить причину различия в этом поведении?

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Благодаря Рэйчел, которая заставила меня задуматься о событии, я поняла, что пропустила

public event RoutedEventHandler Click
{
    add { AddHandler ( ClickEvent, value ); }
    remove { RemoveHandler ( ClickEvent, value ); }
}

в своем унаследованном классе.(Будучи событием, оно не наследуется.) Это исправило мою проблему, хотя я все еще удивляюсь, как это вообще сработало.

0 голосов
/ 11 октября 2011

Я знаю, что это не поможет вам понять, как делать то, что вы просили, но в любом случае у меня есть предложение на случай, если это окажется проблемой XYZ.

Просто смотреть на то, что выделать, то есть переключать логические значения с более или менее настраиваемой реализацией кнопки, я бы предложил вместо этого использовать ToggleButton.Это был бы более подходящий для WPF способ сделать это.

Таким образом, состояние ясно в интерфейсе пользователя, вам не нужно подключать логику, переключение выполняется за вас, и вы можетепривязать к IsChecked значению!

В любом случае, ценность моих двух центов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...