我的一个应用程序页面中的ListPicker中有一个SelectionChanged事件,该页面在加载页面之前会多次触发。这对我来说真的很不方便,因为当选择一个项目时,会显示一个MessageBox(并且将执行其他操作)。每次页面NavigatedTo时,MessageBox都会显示两次。我该如何解决这个问题?
XAML
<toolkit:ListPicker x:Name="ThemeListPicker" Header="Theme"
ItemTemplate="{StaticResource PickerItemTemplate}"
SelectionChanged="ThemeListPicker_SelectionChanged"/>
XAML.CS
private void ThemeListPicker_SelectionChanged(object sender,
SelectionChangedEventArgs e)
{
if(ThemeListPicker.SelectedIndex != -1)
{
var theme = (sender as ListPicker).SelectedItem;
if (index == 0)
{
Settings.LightTheme.Value = true;
MessageBox.Show("light");
}
else
{
Settings.LightTheme.Value = false;
MessageBox.Show("dark");
}
}
}
答案 0 :(得分:0)
好吧,这就是listpicker的行为方式,你可以做的最好的事情是让ThemeListPicker_SelectionChanged在datatemplate中创建一个父堆栈面,就像这样
<Listpicker.ItemTemplate>
<DataTemplate x:Name="PickerItemTemplate">
<StackPanel tap="stk_Tap">
<TextBlock/>
</StackPanel>
</DataTemplate>
</Listpicker.ItemTemplate>
<Listpicker.FullModeItemTemplate>
<DataTemplate x:Name="PickerFullModeItemTemplate">
<StackPanel tap="stk_Tap">
<TextBlock/>
</StackPanel>
</DataTemplate>
<Listpicker.FullModeItemTemplate>
现在使用此点击stk_Tap来执行您的操作,此事件也会在每次调用选择被调用时调用,但是,它不会像选择更改事件那样展示错误行为。
希望这会有所帮助。
答案 1 :(得分:0)
在加载ListPicker后附加SelectionChanged事件。
...
InitializeComponent();
YourListPicker.Loaded += YourListPicker_Loaded;
...
private void YourListPicker_Loaded(object sender, RoutedEventArgs e)
{
YourListPicker.SelectionChanged += YourListPicker_SelectionChanged;
}