.NET MAUI新手求助:自定义Popup XAML模板无法显示头尾
解决方案
问题出在你将ControlTemplate应用在了嵌套的ContentView上,而子类ActivityPopup的自定义内容会直接替换父类EntryPopup的Content(也就是那个ContentView),导致包含Header和Footer的模板结构被覆盖。
正确实现方式
直接为Popup本身设置ControlTemplate,让模板包含固定的Header、用于显示自定义内容的ContentPresenter和Footer,具体代码如下:
父类EntryPopup的XAML
<?xml version="1.0" encoding="utf-8" ?> <mct:Popup xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:mct="clr-namespace:CommunityToolkit.Maui.Views;assembly=CommunityToolkit.Maui" x:Class="Page.EntryPopup"> <!-- 直接给Popup设置ControlTemplate --> <mct:Popup.ControlTemplate> <ControlTemplate> <VerticalStackLayout> <Label Text="Header" VerticalOptions="Center" HorizontalOptions="Center" /> <!-- 通过TemplateBinding绑定到Popup的Content属性 --> <ContentPresenter Content="{TemplateBinding Content}" /> <Label Text="Footer" VerticalOptions="Center" HorizontalOptions="Center" /> </VerticalStackLayout> </ControlTemplate> </mct:Popup.ControlTemplate> </mct:Popup>
子类ActivityPopup的XAML(无需修改)
<page:EntryPopup xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:mct="clr-namespace:CommunityToolkit.Maui.Views;assembly=CommunityToolkit.Maui" xmlns:page="clr-namespace:View.Page" x:Class="Page.ActivityPopup"> <VerticalStackLayout> <Label Text="Welcome to .NET MAUI!" VerticalOptions="Center" HorizontalOptions="Center" /> </VerticalStackLayout> </page:EntryPopup>
原理说明
ControlTemplate定义了Popup的整体布局结构,包含固定的Header和Footer。ContentPresenter通过{TemplateBinding Content}绑定到Popup的Content属性,子类中编写的自定义内容会自动填充到这个位置。- 子类无需修改模板结构,只需专注于编写中间区域的自定义内容即可。
内容的提问来源于stack exchange,提问作者jumpin
相关产品推荐
相关产品推荐

