自定义控件

当用户控件也不能满足实际开发需求时,开发者可以编写自己的控件——自定义控件。一般来说,自定义控件应该从Control类派生,当然在需要的时候,也可以ongoing现有的控件类派生。

在控件模板中,除了可以定义控件的外观外,还可以声明控件的可视化状态(Visual State),允许开发者在逻辑代码中操作控件的状态切换。

下面通过实例来向读者说明自定义控件的开发过程。该示例即将完成一个简单的控件,控件中显示一张图片,当操作者在图片上按下鼠标时,会在图片底部显示文本;当松开后文本会隐藏。

在项目中添加自定义控件的方法是:在"解决方案资源管理器"窗口中右击项目名称节点,接着从弹出的快捷菜单中依次执行"添加"-“新建项”,从打开的"添加新项"窗口中选择"模板化控件",输入控件的名称,最后单击"添加"按钮完成新控件类的添加。

自定义控件添加完成后,开发工具会在项目中生成一个新控件类的代码文件,以及一个与之对应的.xaml文件。

用于存放新控件样式和模板的XAML文件名为Generic,它位于Themes目录下,这是一个固定结构,表示该XAML文件中的内容与自定义的控件类相关,也便于与当前的系统主题匹配,一般来说没有必要改动它。

既然控件的样式和模板都在XAML文件中作为资源项定义的,那么它又如何与控件类的代码关联的呢?

本示例中的自定义控件的名称为MyControl。读者可以打开生成的控件类的代码文件,会看到在类的构造中有这么一行代码:

            this.DefaultStyleKey = typeof(MyControl);

DefaultStyleKey表示控件的默认样式,通过将当前控件的Type(类型信息)赋值给DefaultStyleKey属性后,控件类就能够在对应的XAML文档中寻找特定于MyControl类的样式或模板资源了。

而在Generic.xaml文件中,通过TargetType来指定样式或模板所要应用到的控件的类型。例如:

    <Style TargetType="local:MyControl" >
        <Setter Property="FontSize" Value="20"/>
        <Setter Property="Background" Value="DarkBlue"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:MyControl">
                    <Grid>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="Showtext">
                                    <Storyboard>
                                        <DoubleAnimation Storyboard.TargetName="bdtext" Storyboard.TargetProperty="Opacity"
                                                         Duration="0:0:0.3" To="1.0"/>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值