[UWP]了解模板化控件(4):TemplatePart

1. TemplatePartTemplatePart(部件)是指ControlTemplate中的命名元素。控件逻辑预期这些部分存在于ControlTemplate中,并且使用protected DependencyObject GetTemplateChild(String childName)获取它们后进行操作。以AutoSuggestBox为例,它的ControlTem
摘要由CSDN通过智能技术生成

1. TemplatePart

TemplatePart(部件)是指ControlTemplate中的命名元素。控件逻辑预期这些部分存在于ControlTemplate中,并且使用protected DependencyObject GetTemplateChild(String childName)获取它们后进行操作。

以AutoSuggestBox为例,它的ControlTemplate结构如下,可以看到AutoSuggestBox由四个TemplatePart组成,每个TemplatePart都可以在控件代码中以编程方式访问:

下图显示了AutoSuggestBox的TemplatePart:

2. 使用TemplatePart

上一篇文章构造了一个很基础的控件HeaderedContentControl,这次通过扩展这个类做些试验性质的功能来介绍模板化控件的进阶知识。

新建一个名为ContentView的控件,继承自HeaderedContentControl,它要实现的功能有两个:

  • 控件的Header默认Opacity=0.7,当鼠标移动到控件上时,设置Header的Opacity=1。
  • 当Header为空时,隐藏用于显示Header的HeaderContentPresenter。

虽然可以使用依赖属性及TemplateBinding的方式实现这个需求,不过这次用TemplatePart的方式实现。很显然,要实现这次的需求最直接的做法是获取显示Header的TemplatePart,然后用代码对其进行操作。大致上分为两步:添加TemplatePart名称,在代码中获取这个部件并操作。

2.1 添加TemplatePart名称

在ContentView的ControlTemplate中为ContentPresenter命名为HeaderContentPresenter:

<ContentPresenter x:Name="HeaderContentPresenter"
                  Foreground="{ThemeResource TextControlHeaderForeground}"
                  Margin="0,0,0,8"
                  FontWeight="Normal"
                  Content=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模板件可以通过支持Command来实现与应用程序的交互。Command是一种对象,用于表示操作并将其绑定到件。在模板件中,可以使用Command来响应用户的交互事件,例如按钮的单击事件。 在UWP中,可以使用ICommand接口来创建Command。ICommand定义了两个方法:CanExecute和Execute。CanExecute方法用于检查Command是否可以执行,而Execute方法用于执行Command。 具体实现时,可以为模板件添加一个Command属性,然后在模板中绑定该属性。例如,可以在Button模板中添加一个Command属性,并将其绑定到Button的Command属性。当用户单击按钮时,件会调用Command的Execute方法,执行相应的操作。 以下是一个简单的示例,演示如何在模板件中使用Command: ``` public class MyControl : Control { public MyControl() { this.DefaultStyleKey = typeof(MyControl); } public ICommand MyCommand { get { return (ICommand)GetValue(MyCommandProperty); } set { SetValue(MyCommandProperty, value); } } public static readonly DependencyProperty MyCommandProperty = DependencyProperty.Register("MyCommand", typeof(ICommand), typeof(MyControl), new PropertyMetadata(null)); } <Style TargetType="local:MyControl"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="local:MyControl"> <Button Content="Click Me" Command="{TemplateBinding MyCommand}" /> </ControlTemplate> </Setter.Value> </Setter> </Style> ``` 在这个例子中,MyControl添加了一个MyCommand属性,并在模板中绑定到一个Button件的Command属性。当用户单击按钮时,件会调用MyCommand的Execute方法。 使用模板件的好处是可以将件的外观和交互逻辑分离。这样可以使代码更易于维护和扩展。通过支持Command,模板件可以更好地与应用程序的交互进行整合,实现更复杂的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值