在我的WPF计划中,我的ListView
列中包含checkbox
:
<ListView>
<ListView.View>
<GridView>
<GridViewColumn Header="Checkbox-Column">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Border BorderThickness="2" BorderBrush="AntiqueWhite">
<CheckBox IsChecked="{Binding Status}" />
</Border>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
当用户点击复选框时,它应立即更改状态。但实际上,用户需要两次点击。第一次单击选择行(或将其放入&#34;编辑模式&#34;,虽然我对此不确定),然后第二次单击更改复选框状态。
如何通过首次点击强制复选框更改?
编辑:此行为的原因是,我使用bool?
而不是bool
来绑定复选框。该属性的初始值为null
(并且必须为),因此第一次点击会将值更改为false
,将second
更改为true(这就是为什么它似乎是控制对第一次点击没有反应
所以 - 问题应该是:如何强制控件从null
更改为true
而不是false
?
提前致谢,
弗兰克
答案 0 :(得分:1)
如何强制控件从
null
更改为true
而不是false
?
在视图中编写一些代码,在第一次将IsChecked
属性设置为true
时将false
属性设置为private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
var cb = e.Source as CheckBox;
cb.IsChecked = true;
cb.Unchecked -= CheckBox_Unchecked;
}
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
var cb = e.Source as CheckBox;
cb.IsThreeState = false;
}
:
<CheckBox IsChecked="{Binding Status}" IsThreeState="True"
Checked="CheckBox_Checked"
Unchecked="CheckBox_Unchecked"/>
~/.odbcinst.ini
答案 1 :(得分:0)
您必须将VerticalAlignment
的{{1}}和HorizontalAlignment
(以及可能的CheckBox
)设置为Border
。
默认情况下,这在大多数控件上都已完成,但您可能会通过显式样式覆盖它,或者ListView默认会为其子项覆盖它(不确定它的行为)。