2014-02-06 39 views
1

我在设置页面上的控件状态时遇到问题。例如,我有一个复选框,我想根据它的值来设置它的checked状态,我可以做得很好,但每次我这样做时都会运行Checked click事件。在这种情况下,这是一个问题,因为我有一个始终显示的CustomMessageBox。无论页面是从其他页面导航还是从墓碑恢复,都会发生这种情况。我怎样才能解决这个问题,直观地显示视图中的状态,但不运行与之相关的事件?如何在OnNavigatedTo中正确设置CheckBox控件的状态

Page.xaml

<CheckBox x:Name="CheckBox" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"> 
         <CheckBox.Content> 
          <TextBlock Text="checked or not checked" FontSize="20" TextWrapping="Wrap"/> 
         </CheckBox.Content> 
        </CheckBox> 

Page.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 

     //Set the checked state of the Checkbox when page is navigated to 
     if (Settings.CheckBoxEnabled.Value == true) 
      CheckBox.IsChecked = true; 
     else 
      CheckBox.IsChecked = false; 

    } 

private void CheckBox_Checked(object sender, RoutedEventArgs e) 
    { 
     var cb = sender as CheckBox; 

     if (cb.IsChecked.HasValue) 
     { 
      if (cb.IsChecked.Value == true) 
      { 
       Settings.CheckBoxEnabled.Value = true; 

       //..code that calls another method which also shows a CustomMessageBox 
      } 
     } 
    } 

    private void CheckBox_Unchecked(object sender, RoutedEventArgs e) 
    { 
     var cb = sender as CheckBox; 

     if (cb.IsChecked.HasValue) 
     { 
      if (cb.IsChecked.Value == false) 
      { 
       Settings.CheckBoxEnabled.Value = false; 

       CustomMessageBox messageBox = new CustomMessageBox() 
       { 
        Caption = "\n" + "Checkbox change!", 
        Message = "\n" + "You have changed the state of the checkbox." + "\n", 
        LeftButtonContent = "OK" 
       }; 

       messageBox.Dismissed += (s1, e1) => 
       { 
        switch (e1.Result) 
        { 
         case CustomMessageBoxResult.LeftButton: 
          //Do nothing 
          break; 
         case CustomMessageBoxResult.None: 
          //Do nothing 
          break; 
         default: 
          //Do nothing 
          break; 
        } 
       }; 

       messageBox.Show(); 
      } 
     } 
    } 

我工作的实施,除了上述的问题很大。如何解决页面导航时触发的这些事件?

回答

0

如果您不希望每次选中CheckBox时触发事件,但希望在用户单击时触发它,请订阅CheckBox.Click。代码看起来是这样的:

// in page Constuctor or in XAML: 
myCheckBox.Click += myCheckbox_Click; 

private void myCheckbox_Click(object sender, RoutedEventArgs e) 
{ 
    if (myCheckBox.IsChecked == true) 
    { 
     //do for check 
    } 
    else 
    { 
     //do for uncheck 
    } 
} 
0

的一种方式(见鬼)管理检查/上导航选中事件使用全局int变量在页面上

只是声明页面CS类的全局变量

int CheckFlag = 0; 

现在,在检查时

private void CycleTileCheckBox_Checked(object sender, RoutedEventArgs e) 
    { 
     if(checkFlag!=0) 
     { 
     var cb = sender as CheckBox; 
     if (cb.IsChecked.HasValue) 
     { 
      if (cb.IsChecked.Value == true) 
      { 
       Settings.CheckBoxEnabled.Value = true; 
       //..code that calls another method which also shows a CustomMessageBox 
      } 
     } 
     } 
     else 
     {checkFlag=1;} 
    } 

不要忘记做它在On NavigatedFrom事件上为0。

相关问题