Добавление класса, производного от PivotItem, в Pivot вызывает исключение - PullRequest
0 голосов
/ 07 марта 2019

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

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

Невозможно применить стиль с TargetType 'Windows.UI.Xaml.Controls.PivotItem' к объекту типа'Windows.UI.Xaml.Controls.ContentControl'.

Значение HRESULT составляет 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, количество?


EDIT2: воспроизводятся в пустом проекте.На главной странице 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, новый проект Unversal для Windows C #.Windows 10 Pro, версия 1803 (сборка 17134,648).

...