在我的应用中,需要这样做
我发现,当我点击复选框时,已检查事件始终会触发
和
选中标记始终转为“已检查”状态
如何解决问题??? 任何建议都会很棒,谢谢!
答案 0 :(得分:1)
只需要一个技巧。与您分享样品。
将复选框上的透明背景网格与透明背景重叠。
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel>
<Grid>
<CheckBox Name="cb" Content="cb" Checked="CheckBox_Checked_1"/>
<!--Grid that overlaps the checkbox-->
<Grid Background="Transparent" Tap="Grid_Tap_1"/>
</Grid>
</StackPanel>
</Grid>
这种重叠不会调用任何复选框事件,即使你点击它
现在在事件的代码中
private void Grid_Tap_1(object sender, GestureEventArgs e)
{
if(MessageBox.Show("Message")==MessageBoxResult.Ok)
{
cb.IsChecked=True;
}
}
答案 1 :(得分:0)
取代Tap事件,尝试复选框的Checked和Unchecked Events。
注意:您可以使用IsChecked
属性在复选框的“已选中”和“未检查”事件中跟踪已检查状态,并在适当的事件中编写代码。
向用户询问确认后。
如果用户点击“是”,请设置chkBox.IsChecked=true;
否则
如果用户点击“否”,请设置chkBox.IsChecked=false;
答案 2 :(得分:0)
我认为没有办法停止复选框默认行为。因此,您可以在堆栈面板中创建带有图像和textbolck的自定义控件。你应该使用“Image”控制源一对图像来取消选中,另一对用于检查。
//At start,the checkbox is unchecked
<StackPanel x:Name="panelCheckBox" Tap="panelCheckBox_Tap_1" Orientation="Horizontal">
<Image Source="UncheckImageSourc" x:Name="ImgeCheckBox"/>
<TextBlock Text="CheckBox Content"/>
</StackPanel>
In Code Behind
bool IsChecked=false;
private void panelCheckBox_Tap_1(object sender, System.Windows.Input.GestureEventArgs e)
{
//If user click "Yes,I want to do it",then checkmark is visible and now it is checked
if(!IsChecked)
{
IsChecked =true;
ImgeCheckBox.Source = "CheckImageSource";
}
else
{
IsChecked =false;
ImgeCheckBox.Source = "UncheckImageSourc";
}
}