Различают события, инициируемые пользовательским вводом и Vs.Код за UWP - PullRequest
0 голосов
/ 25 мая 2018

У меня есть CheckBox в приложении UWP, которым манипулируют как пользователь, так и код.Когда пользователь проверяет это, я хочу, чтобы событие Checked сработало.Однако, когда код проверяет его (как показано ниже), я не хочу, чтобы он запускался.

checkBoxExample.isChecked = true; //The Checked event should not fire.

Я подумал, что получу эту информацию либо от отправителя (объекта), либо от e (RoutedEventArgs)но его там нет.

1 Ответ

0 голосов
/ 25 мая 2018

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

private bool _checkedFromCode = false;

private void CheckboxChecked(object sender, RoutedEventArgs e)
{
    if ( !_checkedFromCode )
    {
        //your logic
    }
}

Теперь при установке IsChecked из кода:

_checkedFromCode = true;
checkBoxExample.IsChecked = true;
_checkedFromCode = false;

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

В качестве альтернативы, вы можете создать собственную производную версию CheckBox, которая будет иметь пользовательское событие только для этого сценария.

RE: Tapped событие : предлагаемое решение с событием Tapped не будет работать, так как вы не должны предполагать, что пользователь использует касание, мышь или пероWindows 10 работает с любым типом ввода, поэтому единственным надежным событием является событие Checked.Не должно иметь значения, какой тип ввода вы используете.Это особенно верно, чтобы сделать ваше приложение доступным и инклюзивным.Клавиатура, например, не вызывает событие Tapped.

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