我目前正在使用WinUI 3开发一个浏览器,我已经在浏览器中实现了TabView,每当我的c#代码生成一个新的选项卡时,我希望它能够自动使用Xaml文件中的TabContent(XAMLElement)元素。但始终显示如下错误:

这是没有弹出窗口的代码
private void TabView_AddTabButtonClick(TabView sender, object args)
{
var newTab = new TabViewItem();
newTab.IconSource = new SymbolIconSource() { Symbol = Symbol.Document };
newTab.Header = "New Tab";
// The Content of a TabViewItem is often a frame which hosts a page.
newTab.Content = TabContent;
sender.TabItems.Add(newTab);
}XAML
<Window
x:Class="VoidView.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:VoidView"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid x:Name="Browser" Margin="0,0,0,0" Background="#222" >
<TabView HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AddTabButtonClick="TabView_AddTabButtonClick" TabCloseRequested="TabView_TabCloseRequested">
<TabViewItem Height="35" x:Name="HomeTab" Header="Home" IsClosable="False">
<TabViewItem.IconSource>
<SymbolIconSource Symbol="Home" />
</TabViewItem.IconSource>
<Grid x:Name="TabContent" Margin="0,0,0,0" Background="#282828">
<WebView2 x:Name="WebView" Source="https://google.com" Margin="0,52,0,0"/>
<Grid Margin="0,10,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" Width="666">
<TextBox x:Name="AddressBar" HorizontalAlignment="Center" TextWrapping="NoWrap" Text="" VerticalAlignment="Center" Width="576" PlaceholderText="Search or type a URL here..." TextAlignment="Center" />
<Button Height="32" Width="40" x:Name="Home" Click="Button_Click_1">
<FontIcon FontFamily="Segoe Fluent Icons" Glyph="" Margin="-2,-1,-2,-1"/>
</Button>
<Button Height="32" Width="40" x:Name="Go" Margin="626,0,0,0" Click="Button_Click">
<FontIcon FontFamily="Segoe Fluent Icons" Glyph="" Margin="-2,-1,-2,-1"/>
</Button>
</Grid>
<Button x:Name="Refresh" Margin="0,10,10,0" VerticalAlignment="Top" Height="32" Width="40" FontFamily="Segoe UI Symbol" Click="Button_Click" HorizontalAlignment="Right">
<FontIcon FontFamily="Segoe Fluent Icons" Glyph="" Margin="-2,-1,-2,-1"/>
</Button>
<Button x:Name="Backward" Margin="10,10,0,0" VerticalAlignment="Top" Height="32" Width="40" FontFamily="Segoe UI Symbol" Click="Backward_Click">
<FontIcon FontFamily="Segoe Fluent Icons" Glyph="" Margin="-2,-1,-2,-1"/>
</Button>
<Button x:Name="Forward" Margin="53,10,0,0" VerticalAlignment="Top" Height="32" Width="40" FontFamily="Segoe UI Symbol" Click="Forward_Click">
<FontIcon FontFamily="Segoe Fluent Icons" Glyph="" Margin="-2,-1,-2,-1"/>
</Button>
</Grid>
</TabViewItem>
<TabView.TabStripHeader>
<Grid x:Name="ShellTitlebarInset" Background="Transparent" />
</TabView.TabStripHeader>
<TabView.TabStripFooter>
<Grid x:Name="CustomDragRegion" Background="Transparent" />
</TabView.TabStripFooter>
</TabView>
</Grid>
</Window>应用程序看起来如下:

非常感谢你花时间帮助别人!
发布于 2022-06-12 06:20:37
这不能工作,因为选项卡内容已经添加到XAML中的TabItem中。
相反,您可以创建一个包含所有内容的UserControl,并将其添加到您的表页中:
newTab.Content = MyUserControl;或者您可以创建一个框架并导航到一个页面。
Frame frame = new Frame();
frame.Navigate(typeof(TabPage));
newTab.Content = frame;您还可以查看这些链接:
https://github.com/microsoft/WinUI-Gallery/blob/winui2/WinUIGallery/ControlPages/TabViewPage.xaml.cs
https://learn.microsoft.com/en-us/windows/apps/design/controls/tab-view
编辑:
要创建一个新页面:转到VS-Studio中的Solutionexplorer,右键单击您的项目->,添加-> new Item -> Emty Page (WinUi3)。
在您给这个页面命名之后,您可以将所有的xaml内容都抛到它中,您想要将它放到您的表页中。
现在,在类型中,将您之前创建的页面的名称放入其中。
https://stackoverflow.com/questions/72581836
复制相似问题