Добавление класса, производного от PivotItem, в сводную систему вызывает исключение

#windows-runtime #pivot #win-universal-app

#windows-среда выполнения #сводная #win-universal-app

Вопрос:

UWP, C #. У меня есть Pivot элемент управления. Я пытаюсь добавить PivotItem производный объект в коллекцию Items. Это приводит к COMException :

Не обнаружено установленных компонентов.

Не удается применить стиль с TargetType ‘Windows.UI.Xaml.Controls.PivotItem’ к объекту типа ‘Windows.UI.Xaml.Controls.ContentControl’.

Результатом является 0x800f1000, если это имеет значение.

Воспроизводится на чистом примере. Это работает:

 MyPivot.Items.Insert(1, new PivotItem() { Header = "Boo" });
  

И это исключения:

 MyPivot.Items.Insert(1, new BooItem() { Header = "Boo" });
  

Где BooItem определяется как

 public class BooItem : PivotItem
{
    public BooItem(){}
}
  

Если указано через XAML, PivotItem производные классы работают в Pivot . Все мои другие элементы в приложении похожи на это.

Вся кодовая база является портом из Windows Phone Silverlight (ориентирована на WP8.0), там это сработало. Теперь UWP не совсем такой, но все же, вы ожидаете…

РЕДАКТИРОВАТЬ: вы можете добавить элемент как невидимый. Заголовок все равно появится, но содержимое будет, ну, невидимым. Попытка сделать его видимым вызывает то же исключение.

В Pivot документах есть интересная строка:

Любой элемент, который вы добавляете в Pivot, который явно не является PivotItem, неявно оборачивается в PivotItem.

Учитываются ли объекты, которые являются производными PivotItem ?


ПРАВКА 2: воспроизведено в пустом проекте. Главная страница XAML переходит:

 <Page
    x:Class="UWTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UWTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Pivot x:Name="ThePivot">
        <PivotItem Header="Foo">
            <StackPanel>
                <Button Content="Go" Click="OnGo"/>
            </StackPanel>
        </PivotItem>
        
    </Pivot>
</Page>
  

Код, лежащий в основе, идет:

 using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace UWTest
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void OnGo(object sender, RoutedEventArgs e)
        {
            ThePivot.Items.Insert(1, new BooItem() { Header = "Boo" });
        }
    }
    public class BooItem : PivotItem
    {
        public BooItem() { }
    }
}
  

Visual Studio 2015 обновление 3, целевая версия 14393, минимальная версия та же.

РЕДАКТИРОВАТЬ: воспроизведено на другой машине. Visual Studio 2015, совершенно новый проект Windows C #, не имеющий аналогов. Windows 10 Pro, версия 1803 (сборка 17134.648).

Комментарии:

1. Я создал BooItem с вашим кодом, затем добавил его в MyPivot.Items , он работает хорошо, я не могу воспроизвести вашу проблему, не могли бы вы поделиться более подробной информацией о целевой версии проекта uwp или мини-примере для нас?

2. Смотрите правку. Это может быть специфично для версии VS и / или версии SDK.

3. На моей стороне нет Visual Studio 2015, я тестировал с Visual Studio 2017 целевой версии 14393. Проект работает хорошо, и никаких исключений не возникает.

4. Я только что создал новый проект в VS2017 v.15.8.9, предназначенный для Windows 14393, вставил в него приведенный выше XAML / C # (по модулю пространства имен), запустил, щелкнул — то же исключение . Win10 Enterprise build 17134.590.

5. Не могли бы вы поделиться с нами небольшим примером, который мог бы воспроизвести проблему?