可重用的内容视图 .NET MAUI

2024-03-01

简而言之,我有一个内容视图,例如;

<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="myapp.customstacklayout">
    <StackLayout>


        <StackLayout>
            <StackLayout x:Name="header">

                <!-- some title things here, such as a header label etc-->

            </StackLayout>
            <StackLayout x:Name="content">

                <!--Contents should be added here when reused-->


            </StackLayout>
            <StackLayout x:Name="footer">

                <!-- some footer things here, such as a summary label etc-->

            </StackLayout>
        </StackLayout>

        <!--Not here-->

    </StackLayout>
</ContentView>

我想在 ContentPage 中重用它,例如;

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:mycontrols="clr-namespace:myapp"
             x:Class="myapp.mainpage">

    <StackLayout>
        <mycontrols:customstacklayout>

            <Button Text="TestButton"/>
            <Entry Text="TestEntry"/>
            <Label Text="TestLabel"/>
                .... and etc..

        </mycontrols:customstacklayout>
    </StackLayout>
</ContentPage>

要创建这样一个可重用的项目,我认为,在 xaml 中,必须有一些内容让 contentview 指出应该将子项添加到哪个 IView 项目中

有什么想法或一段代码吗?

提前致谢。

Ender

编辑:我更改了我的 contentview xaml 以使用 ControlTemplate。在我想要显示添加的子项的位置添加了资源和 contentPresenter。但还是看不到孩子们

<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="myapp.customstacklayout">
    <ContentView.Resources x:Key="template">
    <ControlTemplate>
    <StackLayout>


        <StackLayout>
            <StackLayout x:Name="header">

                <!-- some title things here, such as a header label etc-->

            </StackLayout>
            <StackLayout x:Name="content">

                <!--Contents should be added here when reused-->
                    <ContentPresenter/>


            </StackLayout>
            <StackLayout x:Name="footer">

                <!-- some footer things here, such as a summary label etc-->

            </StackLayout>
        </StackLayout>

        <!--Not here-->

    </StackLayout>
    </ControlTemplate>
</ContentView.Resources>

</ContentView>

好吧,如果你想创建一个可重用的ContentView.NET MAUI,您可以创建Control Templates with Content Presenter进而reuse它在您想要的页面中。

您可以参考下面的详细步骤来了解如何使用它。

1.创建自定义控件:自定义控件.xaml继承自ContentView with a custom BindableProperty 如下所示:

XAML:

<ContentView.ControlTemplate>

    <ControlTemplate>

        <Frame>

            <VerticalStackLayout>
                <Label Text="{TemplateBinding Title}"/>

                <ContentPresenter/>
            </VerticalStackLayout>
        </Frame>
    </ControlTemplate>
    
    
</ContentView.ControlTemplate>

隐藏代码:

public partial class CustomControl : ContentView 
{
    public static readonly BindableProperty TitleProperty =
  BindableProperty.Create(nameof(Title), typeof(string), typeof(CustomControl) );

    public CustomControl()
    {
        InitializeComponent();
    }

    public string Title
    {

        get => GetValue(TitleProperty) as string;
        set => SetValue(TitleProperty, value);

    }
}


2.您可以在以下位置多次重复使用它MainPage.xaml像下面这样:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:controls="clr-namespace:MauiAppCustomDemo.Controls"
             x:Class="MauiAppCustomDemo.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">


            <controls:CustomControl Title="Hello World">
                <VerticalStackLayout>
                    <Label Text="Label 1"/>
                    <Label Text="Label 2"/>

                </VerticalStackLayout>
                
            </controls:CustomControl>

            <controls:CustomControl Title="Hello again">

                <HorizontalStackLayout>
                    <Label Text="Label 3"/>
                    <Label Text="Label 4"/>
                </HorizontalStackLayout>
            </controls:CustomControl>

        </VerticalStackLayout>
    </ScrollView>

</ContentPage>

微软官方参考链接:https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/controltemplate?view=net-maui-7.0 https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/controltemplate?view=net-maui-7.0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可重用的内容视图 .NET MAUI 的相关文章

随机推荐

  • 我如何更新 npm 本身?

    我正在尝试更新 npm 本身 npm uninstall npm g 回应 unbuild email protected cdn cgi l email protection 但当我去的时候 npm version 我得到1 4 28 如
  • Android:检查联系人列表中存在的电话号码? (从电话中检索电话号码)

    我做了一个BroadcastReceiver接收给我打电话的人的电话号码
  • 单个实体参考的 WCF 序列化和 NHibernate 代理

    假设有一个 NHibernate 实体 School 其 Manager 属性引用了 Person 类型的单个实体 为了 WCF 准备就绪 Person 被装饰为DataContractAtrribute School Manager 的
  • 实体框架中的条件 Include() [重复]

    这个问题在这里已经有答案了 我已经看到了类似问题的一些答案 但是我似乎无法弄清楚如何将答案应用于我的问题 var allposts context Posts Include p gt p Comments Include aa gt aa
  • 插入排序的时间复杂度

    谁能解释一下为什么插入排序的时间复杂度是 n 我相当确定我将时间复杂度理解为一个概念 但我并不真正理解如何将其应用于此排序算法 我应该只通过数学证明来找到这个答案吗 平均而言 每次插入必须遍历当前排序列表的一半 同时每一步进行一次比较 该列
  • 如何在带有复制和交换习惯用法的赋值运算符中使用 noexcept ?

    移动赋值运算符通常应声明为 noexcept 即将类型存储在 STL 容器中 但是复制和交换习惯用法允许在单段代码中定义复制和移动赋值运算符 在这种情况下 如何使用 noexcept 说明符 复制构造可以抛出异常 但我怀疑它是否会违反 no
  • 如何更新Slurm中的作业节点号?

    我有一项待处理的工作 我想调整它的大小 我试过 scontrol update job
  • VBA获取该月的最后一天

    我对 VBA 还很陌生 我有一个日期范围 我需要编写一个代码 将单元格中的日期更改为单元格中使用的该月的最后一天 例如 如果单元格中的日期是28 03 2018我希望它被替换为31 03 2018 知道我该怎么做吗 借助 Eomonth 公
  • C# SCROLLINFO 不适用于 Chrome 窗口

    我试图从窗口句柄检索滚动信息 但我一直得到 0 值 我采用这种方法是因为我的目标是捕获窗口的完整滚动屏幕截图 目的是实现自动滚动和图像捕获 虽然我已经成功实现了自动窗口滚动 但我遇到了不同窗口的滚 动行为的变化 例如 发送 100 的鼠标增
  • 如何编写采用字符串迭代器的特征方法,避免单态化(静态调度)?

    我想定义一个具有对字符串序列进行操作的方法的特征 同时 我想避免在特征中使用泛型方法 即静态分派 以便我可以将此特征用作特征对象 到目前为止 我得到的最好的解决方案是像下面这样做 pub trait Store fn query valid
  • 应用程序无法加载。无法创建 Visual C# 2015 RC 编译器

    我正在尝试安装Visual Studio 2015 RC https www visualstudio com en us downloads visual studio 2015 downloads vs社区版 我下载了网络安装程序并安装
  • 没有 Chrome 浏览器的 Google TV 模拟器?

    在启用了 KVM 的 Linux 机器上 Google TV 模拟器上没有 Google Chrome 浏览器是否正常 当启动一个Intent从我的应用程序点击网页 我收到错误消息 No activity found to handle i
  • 最相距的 k 个元素(聚类?)

    我有一个简单的机器学习问题 我有 n 110 个元素 以及所有成对距离的矩阵 我想选择相距最远的 10 个元素 也就是说 我想要 Maximize Choose 10 different elements Return min distan
  • 如何从头开始启动 MFC 应用程序?

    换句话说 来自一个空白的 win32 项目 无向导 这就是我所在的地方 预处理器定义 WIN32 链接器 gt 系统 gt 子系统 控制台 int tmain int nRetCode 0 initialize MFC and print
  • 在 Visual Studio 2010 中控制 Tab 键顺序

    有没有一种简单的方法可以在 Visual Studio 表单设计器中更改复杂表单上控件的选项卡顺序 我知道我可以选择 Tab Order 模式 它会向我显示所有控件及其选项卡索引 但是在复杂的表单中间添加新控件并且必须再次重新选择表单上的每
  • 页面加载时的简洁过渡和动画

    我目前正在使用 Svelte 和 Sapper 开发一个网站 我正在使用 Svelte 过渡来为某些页面元素添加动画效果 每当我更改为新的页面路由时 过渡动画都会正确显示 但是当我第一次加载页面时 它们没有动画 Svelte 如何处理页面加
  • Visual Studio 2010 中的 Boost,IntelliSense 错误

    我想看看你能否给我指路 我碰巧编译并引用了 boost 库 以便将它们与 Visual Studio 2010 一起使用 在构建我的测试项目时 我收到这两个 IntelliSense 错误 1 IntelliSense error dire
  • C# asp.net 调用 javascript

    我在 asp content 中有一个 div
  • 在Matlab中过滤包含NaN的图像?

    我有一个二维数组 doubles 代表一些数据 它有一堆NaNs在里面 数据的等值线图如下所示 所有的空白都是NaNs 灰色菱形可供参考 填充轮廓显示我的数据的形状 当我用过滤数据时imfilt the NaNs大量地研究数据 所以我们最终
  • 可重用的内容视图 .NET MAUI

    简而言之 我有一个内容视图 例如