#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. Не могли бы вы поделиться с нами небольшим примером, который мог бы воспроизвести проблему?