首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何设置newTab.Content = XAMLElement?(WinUI 3)

如何设置newTab.Content = XAMLElement?(WinUI 3)
EN

Stack Overflow用户
提问于 2022-06-11 04:56:07
回答 1查看 139关注 0票数 1

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

这是没有弹出窗口的代码

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
<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="&#xE80F;" 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="&#xE751;" 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="&#xe72c;" 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="&#xf0d3;" 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="&#xF0D2;" 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>

应用程序看起来如下:

非常感谢你花时间帮助别人!

EN

Stack Overflow用户

回答已采纳

发布于 2022-06-12 06:20:37

这不能工作,因为选项卡内容已经添加到XAML中的TabItem中。

相反,您可以创建一个包含所有内容的UserControl,并将其添加到您的表页中:

代码语言:javascript
运行
复制
newTab.Content = MyUserControl;

或者您可以创建一个框架并导航到一个页面。

代码语言:javascript
运行
复制
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内容都抛到它中,您想要将它放到您的表页中。

现在,在类型中,将您之前创建的页面的名称放入其中。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72581836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档