将PivotItem派生的类添加到Pivot会引发异常

时间:2019-03-07 17:24:43

标签: windows-runtime pivot win-universal-app

UWP,C#。我有一个Pivot控件。我试图将PivotItem派生的对象添加到Items集合中。它抛出一个COMException

  

未检测到已安装的组件。

     

不能将目标类型为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文档中有一行有趣的内容:

  

您添加到数据透视表中的任何未明确定义为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,v 1803(内部版本17134.648)。

0 个答案:

没有答案