我已多次使用以下
if (chkBox.IsChecked.HasValue && chkBox.IsChecked.Value)
但为什么呢? chkBox.IsChecked.HasValue
变为假的情况是什么?
我通过创建一个复选框进行检查并对其进行调试以查看HasValue
。
检查构造函数,检查并取消选中复选框后选中。但HasValue
总是被发现是真的。
答案 0 :(得分:7)
chkBox.IsChecked
是bool?
,这意味着它是可以为空的布尔值(可以设置为null
)。该复选框可以包含三个值:true
,false
和null
。
HasValue
设置为false
, IsChecked
将为null
。
因此,您可以绑定到Checked
属性并将值设置为null
,就像在此代码中一样。 HasValue
将为false
:
chkBox.IsChecked = null;
另外,请参阅有关Nullable<T>
的使用情况的文档。
Nullable<T>
是struct
,实际上它不能是null
。这只是C#中的一个技巧。您看到它是null
,但事实上它是struct
,HasValue
设置为false
。
答案 1 :(得分:1)
复选框可以是ThreeState - 可以检查,取消选中或不确定值。如果值不确定,HasValue
将返回false。
<CheckBox IsThreeState="True" IsChecked="{x:Null}" />