区分用户输入Vs触发的事件。 UWP背后的代码

时间:2018-05-25 03:32:39

标签: c# xaml checkbox uwp

我在UWP应用程序中有一个CheckBox,由后面的用户和代码操纵。当用户检查它时,我确实希望触发Checked事件。但是,当后面的代码检查它时(如下所示),我不希望它发射。

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

我想我会从发件人(对象)或e(RoutedEventArgs)获取此信息,但它不在那里。

1 个答案:

答案 0 :(得分:2)

您可以添加一个标志,然后设置该标志以避免处理该事件:

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事件。