Сбой ListPicker - PullRequest
       46

Сбой ListPicker

4 голосов
/ 05 мая 2011

У меня есть ListPicker со следующей структурой:

toolkit:ListPicker x:Name="mListPicker" HorizontalAlignment="Right" Margin="0,75,43,0" Width="100" VerticalAlignment="Top">
< toolkit:ListPickerItem Content="5"/>
< toolkit:ListPickerItem Content="10"/>
< toolkit:ListPickerItem Content="15"/>
< toolkit:ListPickerItem Content="20"/>
< toolkit:ListPickerItem Content="25"/>
< toolkit:ListPickerItem Content="30"/>
< /toolkit:ListPicker>

При каждом запуске этого сообщения появляется следующее сообщение:

System.Windows.Markup.XamlParseException occurred
  Message= [Line: 0 Position: 0]
   --- Inner Exception ---
The parameter is incorrect. 

  LineNumber=0
  LinePosition=0
  StackTrace:
       at MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, CValue[] cvData)
       at MS.Internal.XcpImports.MethodEx(DependencyObject obj, String name)
       at MS.Internal.XcpImports.FrameworkElement_ApplyTemplate(FrameworkElement frameworkElement)
       at System.Windows.FrameworkElement.ApplyTemplateInternal()
       at System.Windows.Controls.ScrollContentPresenter.HookupScrollingComponents()
       at System.Windows.Controls.ScrollContentPresenter.OnApplyTemplate()
       at System.Windows.FrameworkElement.OnApplyTemplate(IntPtr nativeTarget)
       at MS.Internal.XcpImports.MeasureNative(IntPtr element, Single inWidth, Single inHeight)
       at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize)
       at System.Windows.UIElement.Measure(Size availableSize)
       at System.Windows.Controls.ScrollViewer.MeasureOverride(Size constraint)
       at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
       at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
       at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize)
       at System.Windows.FrameworkElement.MeasureOverride(Size availableSize)
       at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
  InnerException: System.ArgumentException
       Message=The parameter is incorrect. 
       StackTrace:
            at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
            at MS.Internal.XcpImports.SetValue(INativeCoreTypeWrapper obj, DependencyProperty property, DependencyObject doh)
            at MS.Internal.XcpImports.SetValue(INativeCoreTypeWrapper doh, DependencyProperty property, Object obj)
            at System.Windows.DependencyObject.SetObjectValueToCore(DependencyProperty dp, Object value)
            at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet, Boolean isSetByStyle, Boolean isSetByBuiltInStyle, PropertyInvalidationReason reason)
            at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value)
            at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
            at System.Windows.Controls.ContentControl.set_Content(Object value)
            at System.Windows.Controls.ItemsControl.PrepareContainerForItemOverride(DependencyObject element, Object item)
            at System.Windows.Controls.Primitives.Selector.PrepareContainerForItemOverride(DependencyObject element, Object item)
            at System.Windows.Controls.ItemsControl.MS.Internal.Controls.IGeneratorHost.PrepareItemContainer(DependencyObject container, Object item)
            at System.Windows.Controls.ItemContainerGenerator.System.Windows.Controls.Primitives.IItemContainerGenerator.PrepareItemContainer(DependencyObject container)
            at System.Windows.Controls.ItemsControl.AddVisualChild(Int32 index, DependencyObject container, Boolean needPrepareContainer)
            at System.Windows.Controls.ItemsControl.AddContainers()
            at System.Windows.Controls.ItemsControl.RecreateVisualChildren(IntPtr unmanagedObj)
            at MS.Internal.XcpImports.MethodExNative(IntPtr context, IntPtr element, UInt32 cString, String name, UInt32 cParams, IntPtr pParams, CValue& outval, Int32& typeIndex)
            at MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, CValue[] cvData)
            at MS.Internal.XcpImports.MethodEx(DependencyObject obj, String name)
            at MS.Internal.XcpImports.FrameworkElement_ApplyTemplate(FrameworkElement frameworkElement)
            at System.Windows.FrameworkElement.ApplyTemplateInternal()
            at System.Windows.Controls.ScrollContentPresenter.HookupScrollingComponents()
            at System.Windows.Controls.ScrollContentPresenter.OnApplyTemplate()
            at System.Windows.FrameworkElement.OnApplyTemplate(IntPtr nativeTarget)
            at MS.Internal.XcpImports.MeasureNative(IntPtr element, Single inWidth, Single inHeight)
            at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize)
            at System.Windows.UIElement.Measure(Size availableSize)
            at System.Windows.Controls.ScrollViewer.MeasureOverride(Size constraint)
            at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
            at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
            at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize)
            at System.Windows.FrameworkElement.MeasureOverride(Size availableSize)
            at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)

В нем говорится, что элемент уже является дочернимдругого.

Но если я уберу последний предмет и оставлю только пять предметов в сборщике, он будет работать нормально.Что я не так делаю?

Ответы [ 3 ]

9 голосов
/ 05 мая 2011

Установите для свойства ItemCountThreshold объекта ListPicker значение больше 6 (по умолчанию в нем указано пять или меньше элементов ). Вам нужно что-то вроде, например:

 <toolkit:ListPicker ItemCountThreshold="10">
                <toolkit:ListPickerItem Content="1" />
                <toolkit:ListPickerItem Content="2"/>
                <toolkit:ListPickerItem Content="3"/>
                <toolkit:ListPickerItem Content="4"/>
                <toolkit:ListPickerItem Content="5"/>
                <toolkit:ListPickerItem Content="6"/>
            </toolkit:ListPicker>

ItemCountThreshold : ItemCountThreshold является свойством зависимости типа int. Он определяет максимальное количество элементов, которые будут отображаться в расширенном режиме. По умолчанию списки с пятью или менее элементами расширяются на месте, а списки с большим количеством элементов переключаются на полноэкранный интерфейс выбора. Также можно установить значение 0 для переключения полного режима или очень большое число для переключения расширенного режима.

4 голосов
/ 19 мая 2011

Я никогда не мог заставить ListPicker работать с использованием ListPickerItem и установить ItemCountThreshold = "0".В документации указано, что когда значение установлено на ноль, полный режим должен происходить автоматически.Не верь этому.Это не работает.

После переключения с использованием кода с привязкой к списку, он наконец заработал.Почему сложный путь (код позади), когда это может быть просто решено с помощью декларативного XAML?Надеюсь, что ListPickerItem будет исправлен в ближайшее время.

3 голосов
/ 25 февраля 2012

ItemCountThreshold теперь является свойством только для чтения в последней версии инструментария.Нет простого способа перейти к встроенному расширению с более чем 5 элементами.

...