【发布时间】:2014-02-06 12:25:02
【问题描述】:
我在设置页面上的控件状态时遇到问题。例如,我有一个复选框,我想根据之前的值设置它的选中状态,我可以做得很好,但是每次我这样做时都会运行 Checked click 事件。在这种情况下,这是一个问题,因为我有一个始终显示的 CustomMessageBox。无论页面是从另一个页面导航到,还是页面从墓碑恢复,都会发生这种情况。如何解决此问题以直观地显示视图中的状态但不运行与其关联的事件?
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();
}
}
}
除了上述问题外,我的实现效果很好。当页面导航到时,如何绕过这些事件触发?
【问题讨论】:
标签: c# xaml windows-phone-7 windows-phone-8