C# CheckBox.IsChecked.HasValue何时变为false?

C# CheckBox.IsChecked.HasValue何时变为false?,c#,.net,wpf,C#,.net,Wpf,我已经用过很多次了 if (chkBox.IsChecked.HasValue && chkBox.IsChecked.Value) 但是为什么呢?在什么情况下,chkBox.IsChecked.HasValue变为false 我通过创建一个复选框并对其进行调试来查看HasValue 在构造函数上选中,在选中并取消选中复选框后选中。但是HasValue总是被发现为true。chkBox.IsChecked是一个bool?,这意味着它是一个可为null的布尔值(可以设置为null

我已经用过很多次了

if (chkBox.IsChecked.HasValue && chkBox.IsChecked.Value)
但是为什么呢?在什么情况下,
chkBox.IsChecked.HasValue
变为false

我通过创建一个复选框并对其进行调试来查看
HasValue


在构造函数上选中,在选中并取消选中复选框后选中。但是
HasValue
总是被发现为true。

chkBox.IsChecked
是一个
bool?
,这意味着它是一个可为null的布尔值(可以设置为
null
)。该复选框可以有三个值:
true
false
null

如果
IsChecked
设置为
null
,则
HasValue
将为
false

因此,您可以绑定到
Checked
属性,并将该值设置为
null
,就像在下面的代码中一样
HasValue
将为
false

chkBox.IsChecked = null;
另外,请参阅有关使用的文档


Nullable
是一个
struct
,实际上它不能是
null
。这只是C#中的一个把戏。您可以看到它是
null
,但实际上它是一个
struct
,将
HasValue
设置为
false

复选框可以是三种状态-可以选中、取消选中或不确定值。如果该值不确定,
HasValue
返回false

<CheckBox IsThreeState="True" IsChecked="{x:Null}" />


如果它是一个3状态复选框,则可以为null(.hasvalue=false)。但是,您必须在标记中指定它为3state。是。我已经尝试分配空值。但是通过这样做,复选框显示了第三种状态。而不是
chkBox.IsChecked.Value
我们可以不写
chkBox.Value
?没有
Value
属性@Sujoy。@Patrick,对不起,我是说
chkBox.IsChecked
。我们可以检查chkBox.IsChecked.Value而不是
chkBox.IsChecked.Value吗?是的,我在赋值null时看到了第三种状态