WPF Checkbox не реагирует на событие MouseLeftButtonDown - PullRequest
3 голосов
/ 26 августа 2009

У меня есть следующий код XAML:

<Grid Background="Blue">
        <Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown">
            <CheckBox MouseLeftButtonDown="CheckBox_MouseLeftButtonDown_1"></CheckBox>
        </Grid>
</Grid>

Когда я щелкаю флажок левой кнопкой мыши, объявленное событие не запускается. У кого-нибудь может быть объяснение этому поведению? Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 26 августа 2009

Событие обрабатывается чем-то другим (вероятно, используется событием Checked).

Если вы измените событие на PreviewMouseLeftButtonDown (туннельная версия MouseLeftButtonDown), оно сработает правильно.

2 голосов
/ 26 августа 2009

CheckBox наследуется от ButtonBase, который добавляет обработчик класса для события левой кнопки вниз (OnMouseLeftButtonDown). В документации по событию UIElement.MouseLeftButtonDown (выделено мной):

Некоторые контрольные классы могут иметь встроенная обработка классов для мыши события кнопки. Левая кнопка мыши Событие вниз является наиболее вероятным событием иметь обработку класса в элементе управления. обработка классов часто отмечает Основное событие класса Mouse как обрабатываются. После того, как событие отмечено обработаны, другие обработчики экземпляров, которые прикреплены к этому элементу не обычно поднимается . Любой другой класс или обработчики экземпляров, которые прикреплены к элементы в направлении барботирования к корню в дереве пользовательского интерфейса также обычно не поднимается.

Вы можете поиграть с ClickMode и установить для него ClickMode.Hover, что, по-видимому, предотвращает поведение, которое вы видите. Однако, возможно, вам придется сохранить собственную логику в вашем обработчике событий для этого конкретного экземпляра, чтобы установить правильное состояние переключения вашего флажка.

Вы также можете попробовать событие PreviewMouseLeftButtonDown. Однако пометка этого события как обработанного в вашем обработчике может иметь побочные эффекты для остальных событий MouseDown - они будут содержать обработанную информацию, что предотвратит другие обработчики экземпляров, если они не будут добавлены с AddHandler с флагом для обработки уже обработанных событий.

0 голосов
/ 26 августа 2009

Фрэнси, спасибо за ваш ответ ... Мне нужно установить флажок MouseLeftDownEvent, и установка clickMode = hover решила мою проблему. Мне нужно MouseleftDownEvent, чтобы передать событие родительской сетке.

...