【问题标题】:Windows Phone Toolkit ListPicker Throws an Unhandled ExceptionWindows Phone 工具包 ListPicker 引发未处理的异常
【发布时间】:2013-06-12 12:50:29
【问题描述】:

我正在开发一个 Windows Phone 8 应用程序。我的应用程序使用来自 Tookit 的 ListPicker。我有问题的代码如下所示:

<toolkit:ListPicker x:Name="myListPicker" Margin="12,-6,12,-2" Loaded="myListPicker_Loaded">
  <toolkit:ListPicker.Items>
    <!-- Items are defined here -->
  </toolkit:ListPicker.Items>
</toolkit:ListPicker>


private void myListPicker_Loaded(object sender, RoutedEventArgs e)
{
  if ((myListPicker != null) && (viewModel != null))
  {

  }
}

只要项目总数超过某个阈值,我的应用就会抛出 System.ArgumentException。我知道这一点,因为我有以下代码:

    private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
    {
        MessageBox.Show(e.ExceptionObject.Message + "\n\nException\n" + e.ExceptionObject.GetType().FullName + "\n" + e.ExceptionObject.StackTrace);
        if (Debugger.IsAttached)
        {
            // An unhandled exception has occurred; break into the debugger
            Debugger.Break();
        }
    }

消息显示“值不在预期范围内。”。据我所知,当 ListPicker 需要进入全屏模式时会发生这种情况。我不知道为什么会这样。

有人有什么见解吗?

【问题讨论】:

  • 你要添加多少项目?

标签: xaml windows-phone


【解决方案1】:

看起来,在全屏模式下,您无法将 ListPicker 的项目设置为 xaml 页面中的特定 UI 元素。您必须绑定它们或使用模板。

遇到这个确切的问题后,我在这里找到了解释:http://silverlight.codeplex.com/workitem/9412

ListPickerItems 是 UIElements,ListPicker 在它的 Presenter 中呈现它们。当项目少于 5 个时,在当前页面打开展开模式,您可以看到演示者中的所有项目。当存在 6 个或更多项目时,打开列表选择器会进入完整模式,从而打开一个新页面。这个新页面有一个列表框,它的 items 属性设置为 listpicker 的项目。这就是它破裂的地方。通过将列表框的项目设置为 listpicker 的项目(在本例中为 listpickeritems 列表),列表框会将这些 UIElements 放入其视图中。现在,一个 listboxitem 包含在可视树上的两个位置。

由于这个问题,ListPicker 只支持数据绑定和模板。 不要将 ListPicker 的项目设置为特定的 UIElements

我设法让我的解决方案像这样工作:

<toolkit:ListPicker x:Name="myListPicker" Margin="12,-6,12,-2" Loaded="myListPicker_Loaded">
  <toolkit:ListPicker.ItemTemplate>
      <DataTemplate>
          <TextBlock Text="{Binding Name}" Tag="{Binding ID}"/>
      </DataTemplate>
   </toolkit:ListPicker.ItemTemplate>
   <toolkit:ListPicker.FullModeItemTemplate>
      <DataTemplate>
          <TextBlock Text="{Binding Name}" Tag="{Binding ID}"/>
      </DataTemplate>
   </toolkit:ListPicker.FullModeItemTemplate>
</toolkit:ListPicker>


private void myListPicker_Loaded(object sender, RoutedEventArgs e)
{
  if ((myListPicker != null) && (viewModel != null))
  {
     myListPicker.ItemsSource = _Data; //_data is an array of objects with 2 properties named ID & Name
  }
}

【讨论】:

    【解决方案2】:

    ListPicker 具有预定义数量的元素,它可以显示在标准列表中。在旧版本的工具包中,您可以更改此阈值,但他们已将其删除。

    但是,由于该工具包是开源的,因此您始终可以做我所做的 - 进入源代码并对其进行更改以允许更大的列表。

    【讨论】:

    • 我同意 ListPicker 进入全屏模式。我只是想让它工作。我不知道为什么它不起作用。
    【解决方案3】:

    使用此版本的工具包,列表选择器的限制为 500(确保您右键单击并取消阻止 .dll 以便您可以使用它) Windows Phone Toolkit Hacked For ListPicker To Support 500 Items - Fall 2013 WP8 Toolkit - By Jeremiah Isaacson

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      相关资源
      最近更新 更多