iloveiniestaandowen
iloveiniestaandowen

Reputation: 141

In Windows phone,How to change checkbox state after questioning user?

In my app,there is a need to do this

  1. At start,the checkbox is unchecked
  2. user tap,and then pop up a messagebox as a alarm to make sure user indeed want to do it(At the moment the checkmark is still collapse)
  3. If user click "Yes,I want to do it",then checkmark is visible and now it is checked
  4. vice versa

I found that,when I tap the checkbox,Checked event is always triggering
and
the checkmark is always turn to "checked" state

How to solve the problem???
Any advice would be great,Thanks!!!

Upvotes: 2

Views: 634

Answers (3)

Jaihind
Jaihind

Reputation: 2778

I think there is no way to stop checkbox default behaviors. So you can create a custom control with a image and a textbolck inside a stack panel. You should use pair of images for "Image" Control Source one for unchecked and another for checked.

//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";
    }

  }

Upvotes: 0

Prakash Kumar
Prakash Kumar

Reputation: 71

Instead of Tap Event, Try Checked and Unchecked Events of the checkbox.

Note: You can track the checked status in "Checked" and "UnChecked" events of the Check Box using IsChecked Property and write your code in appropriate events.

After Asking confirmation to user.

If the user clicks "Yes" , set chkBox.IsChecked=true;

else

If the user clicks "No", set chkBox.IsChecked=false;

Upvotes: 0

A.K.
A.K.

Reputation: 3331

Just a trick is needed. Sharing a sample with you.

overlap a transparent background grid over your checkbox with a transparent background like this.

 <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>

This overlapping wont call any checkbox event even if you tap on it

now in code of the event

    private void Grid_Tap_1(object sender, GestureEventArgs e)
    {
       if(MessageBox.Show("Message")==MessageBoxResult.Ok)
          {
           cb.IsChecked=True;
          }
    }

Upvotes: 1

Related Questions