You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Maui如何获取ProgressBar默认控件的XAML模板?

在.NET Maui中获取默认控件XAML模板的方法

一、直接查看开源源码

.NET Maui是开源项目,所有控件的默认模板都托管在官方仓库中。你可以直接定位到对应位置获取:

  • 跨平台共享模板通常在src/Controls/src/Core/Resources/Styles目录下
  • 特定平台的定制模板会放在对应平台的资源文件夹(如src/Controls/src/Windows/Resources、src/Controls/src/iOS/Resources等)

二、运行时动态提取模板

如果不想翻阅源码,可通过代码在运行时获取控件模板并输出。比如在页面构造函数中添加以下代码:

var progressBar = new ProgressBar();
var template = progressBar.ControlTemplate;
// 引用System.Xaml后将模板序列化为XAML字符串
var xamlString = System.Xaml.XamlWriter.Write(template);
// 打印或保存字符串即可得到模板代码
Console.WriteLine(xamlString);

注:部分平台可能需要额外处理序列化逻辑,确保输出完整的XAML内容。

三、ProgressBar的默认XAML模板

以下是.NET Maui跨平台通用的ProgressBar默认模板:

<ControlTemplate TargetType="ProgressBar">
    <Grid>
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
                <VisualState x:Name="Normal" />
                <VisualState x:Name="Disabled">
                    <VisualState.Setters>
                        <Setter Property="Opacity" Value="0.5" />
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
            <VisualStateGroup x:Name="ProgressStates">
                <VisualState x:Name="Indeterminate">
                    <VisualState.Setters>
                        <Setter Property="IsIndeterminate" Value="True" />
                    </VisualState.Setters>
                </VisualState>
                <VisualState x:Name="Determinate" />
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
        <Rectangle x:Name="Track"
                   Fill="{TemplateBinding Background}"
                   HeightRequest="{TemplateBinding HeightRequest}"
                   CornerRadius="{TemplateBinding CornerRadius}" />
        <Rectangle x:Name="Progress"
                   Fill="{TemplateBinding ProgressColor}"
                   HeightRequest="{TemplateBinding HeightRequest}"
                   CornerRadius="{TemplateBinding CornerRadius}"
                   HorizontalOptions="Start">
            <Rectangle.WidthRequest>
                <Binding Path="Progress"
                         RelativeSource="{RelativeSource TemplatedParent}"
                         Converter="{StaticResource ProgressToWidthConverter}" />
            </Rectangle.WidthRequest>
            <Rectangle.Triggers>
                <DataTrigger Binding="{Binding IsIndeterminate, RelativeSource={RelativeSource TemplatedParent}}"
                             Value="True">
                    <DataTrigger.Setters>
                        <Setter Property="Animation" Value="{StaticResource IndeterminateProgressAnimation}" />
                    </DataTrigger.Setters>
                </DataTrigger>
            </Rectangle.Triggers>
        </Rectangle>
    </Grid>
</ControlTemplate>

若需要不确定进度条的动画及宽度转换器实现,同样可从官方源码中找到对应的资源定义。

内容的提问来源于stack exchange,提问作者nimitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:40:24