Maui 中自定义控件

Fork Me On Github

Maui 中自定义控件

在 Maui 中自定义控件分为两种方式。

  1. 一种是纯代码构建的,在一个cs文件中
  2. 另一种是模板分离,分为xamlcs代码文件

第一种直接通过代码创建控件,并赋予属性,没法在外部修改模板

第二种分为xamlcs文件,在xaml 中定义模板,cs 写属性,类似于WPF中的 UserControl 但又更像是 CustomControl

具体说明

<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="ZoDream.FileTransfer.Controls.MessageTipListItem">
    <ContentView.ControlTemplate>
        <ControlTemplate>
            <Label 
                Text="{TemplateBinding Text}"
                VerticalOptions="Center" 
                HorizontalOptions="Center" Padding="0,10"/>
        </ControlTemplate>
    </ContentView.ControlTemplate>
    <Button Text="121">
</ContentView>

这里分为两部分,一部分是放在 ContentView.ControlTemplate 中,通过 TemplateBinding 获取自定义属性,类似于 WPFCustomControl 定义在 Themes/Generic.xamlStyle.Template, 用法也类似

特别注意,直接作为 ContentView.ContentButton,这里写的控件是无法获取当前控件的属性的,如果在 ContentView.ControlTemplate中没有使用 ContentPresenter 接收,就不会显示,默认 ContentView.ControlTemplate 就有一个 ContentPresenter

在 cs 中通过 BindableProperty 创建定义属性


public string Title {
    get { return (string)GetValue(TitleProperty); }
    set { SetValue(TitleProperty, value); }
}

// Using a DependencyProperty as the backing store for Title.  This enables animation, styling, binding, etc...
public static readonly BindableProperty TitleProperty =
    BindableProperty.Create(nameof(Title), typeof(string), typeof(DialogPanel), string.Empty);



public ICommand TapCommand
{
    get { return (ICommand)GetValue(TapCommandProperty); }
    set { SetValue(TapCommandProperty, value); }
}

// Using a DependencyProperty as the backing store for YesCommand.  This enables animation, styling, binding, etc...
public static readonly BindableProperty TapCommandProperty =
    BindableProperty.Create(nameof(TapCommand), typeof(ICommand),
        typeof(DialogPanel), null);

Click here to view
Tags: maui
0 239 0
maui为Windows应用获取管理员权限