EdwardShare

导航

 
1.什么是控件模板?
我看完这一节,就一个字难,太TM难了,难到上天,但是我还是要慢慢消化。
当我写了一段代码关于按钮的;
 <Button Margin="10" Content="Test" Height="50"> </Button>
按钮正常显示,但是我想自己定义一个按钮,那就麻烦了,原有的方式是不行的了,那么怎么办?
控件模板的问题就提出来了
控件模板:使用的是控件的Template属性
public ControlTemplate Template { get; set; }来自control,
public class ControlTemplate : FrameworkTemplate 
public abstract class FrameworkTemplate : DispatcherObject, INameScope, IQueryAmbient
可以看出这个玩意来自控件,ControlTemplate 继承了FrameworkTemplate 
FrameworkTemplate 继承了DispatcherObject
那就明白了控件模板这个玩意从control向上一脉相传,最中在老祖宗都有。
 <Button Margin="10" Background="SeaGreen" Content="Test" Height="50" Template="{StaticResource btntemp}" >

<Window.Resources>
<ControlTemplate x:Key="btntemp" TargetType="Button">
<Grid>
<Border Background="{TemplateBinding Background }" BorderBrush="Red" BorderThickness="5"/>
<ContentPresenter Content="{TemplateBinding Content }" ></ContentPresenter>
</Grid>

</ControlTemplate>
</Window.Resources>

可以看出来,我对控件模板的理解就是,将复杂的自定义控件抽象出来,通过绑定的方式来给与自己需要的样子,处处可用

 
2.创建自定义控件
如何创建自定义控件这是个棘手的问题,因为这决定了我们能不能自定义控件,使用模板的方式可以自定义控件,这是什么意思?
答:你可以完全的改变控件的外观,但是不会改变控件的行为。这就为自定义控件的外观打下了基础

<Window.Resources>
<ControlTemplate x:Key="btntemp" TargetType="Button">
<Grid>----------------------------------------------------------------------------用grid 是因为这玩意只能接受单一控件
<Border Background="{TemplateBinding Background }" BorderBrush="Red" BorderThickness="5"/>
<ContentPresenter Content="{TemplateBinding Content }" ></ContentPresenter>
</Grid>
</ControlTemplate>
</Window.Resources>

 
 
posted on 2023-01-06 10:47  程序员的夏天  阅读(45)  评论(0编辑  收藏  举报