2014-02-06 42 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。

相關問題