Maui 中自定义控件
在 Maui 中自定义控件分为两种方式。
- 一种是纯代码构建的,在一个
cs
文件中 - 另一种是模板分离,分为
xaml
和cs
代码文件
第一种直接通过代码创建控件,并赋予属性,没法在外部修改模板
第二种分为xaml
和cs
文件,在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
获取自定义属性,类似于 WPF
中 CustomControl
定义在 Themes/Generic.xaml
中 Style.Template
, 用法也类似
特别注意,直接作为 ContentView.Content
的 Button
,这里写的控件是无法获取当前控件的属性的,如果在 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);
转载请保留原文链接: https://zodream.cn/blog/id/234.html