Windows Phone 7 自定义按钮的实现

本文详细介绍了如何使用 Expression Blend 和 Visual Studio 2010 创建自定义按钮,包括创建 ControlTemplate、添加状态效果和绑定背景图。通过实例演示了如何制作一个具有动态效果的自定义按钮。

这段时间着手公司的windows phone7的开发项目,因为项目中许多地方都要用到不同风格式样的按钮,

对phone7也大致研究了下,想要完美的制作精美的按钮,对expression blend也需要熟悉熟悉。在这里我们

用到的首先是expression blend工具。用之前,先需要了解几个概念:

  自定义控件模板 - ControlTemplate。ControlTemplate可以称为控件模板,简单的理解为控件结构和行为的集合。

在项目设计中,经常会使用 ControlTemplate创建新的控件模板或者修改现成的控件模板,使用项目的UI具有独特性。

如何使用Blend创建和修改 ControlTemplate既是制作自定义按钮的关键。

  首先用VS2010建立一个工程,命名为CustomButton,建好后如图所示:

  在Solution Explorer下的MainPage.xaml上点击鼠标右击,这时选择Open in expression blend..

我们计划创建一个简单的按钮,现在从左边工具栏选中矩形框,在主设计窗口画一个矩形框,使用Radius修改矩形框边缘

为圆形。该矩形框是为了Button的模板控件做基础使用的。

然后在主设计窗口选中该矩形控件,点击鼠标右键,选中“Make Into Control..."选项,

这时选择可见:

 保持默认的模板名字“ButtonStyle1”,点中“Control Type”中的Button选项,然后按“OK”。

这样一个简单的ControlTemplate已经创建完了。我们打开Objects and Timeline看看当前控件模板组成信息,

从下图我们可以看到,该Button模板,是由一个矩形控件和ContentPresenter组成的。

这里模板默认的按钮颜色为白色,我们可以修改Rectangle的属性Brushes,以便在程序中动态的改变按钮的背景。

在Brushes的Fill中。点击左键,选择Template Binding的Background,这样就把模板的背景绑定到按钮的Background上了。

(如果不需要自己定义的一些图片作为背景,可以不用绑定,直接修改Brushes的颜色即可)

但是这时还没完成,因为该模板没有任何的视觉效果和事件。也就是说,在这个控件模板中,缺少VSM状态信息。

这里在Blend中的States菜单栏中,可以轻松的控制控件的VSM状态,下面,我们添加一些简单的状态效果。

首先,选中新创建的Button控件,然后打开左边菜单栏States,如果没有发现该Tab,可以在Blend的Window菜单选中States就会出现了。

  在States菜单下,Normal状态为按钮正常时的样式,为了实现点钟按钮后,按钮有放大的效果,首先我们需要将Pressed状态下

按钮变大,这里我们可以修改属性的Margin一栏,修改为Margin(-3,-3,-3,-3):

  其实通过修改VSM状态可以实现更为绚丽复杂的效果,但我们只选取点击按钮变大作为例子。

保存,回到VS2010工程,在MainPage.xaml页面下,可以看到

1 <phone:PhoneApplicationPage.Resources> 2 <Style x:Key="ButtonStyle1" TargetType="Button"> 3 <Setter Property="Template"> 4 <Setter.Value> 5 <ControlTemplate TargetType="Button"> 6 <Grid> 7 <VisualStateManager.VisualStateGroups> 8 <VisualStateGroup x:Name="CommonStates"> 9 <VisualState x:Name="Normal"/> 10 <VisualState x:Name="MouseOver"/> 11 <VisualState x:Name="Pressed"> 12 <Storyboard> 13 <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="rectangle"> 14 <DiscreteObjectKeyFrame KeyTime="0"> 15 <DiscreteObjectKeyFrame.Value> 16 <Thickness>-3</Thickness> 17 </DiscreteObjectKeyFrame.Value> 18 </DiscreteObjectKeyFrame> 19 </ObjectAnimationUsingKeyFrames> 20 </Storyboard> 21 </VisualState> 22 <VisualState x:Name="Disabled"/> 23 </VisualStateGroup> 24 </VisualStateManager.VisualStateGroups> 25 <Rectangle x:Name="rectangle" Fill="{TemplateBinding Background}" RadiusY="20" RadiusX="20" Stroke="White"/> 26 <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 27 </Grid> 28 </ControlTemplate> 29 </Setter.Value> 30 </Setter> 31 </Style> 32 </phone:PhoneApplicationPage.Resources>
 

   这个既是我们刚刚创建的按钮模板,在面的语句中添加Name="ButtonTest",以及背景图:

1 <!--ContentPanel - place additional content here--> 2 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 3 <Button Content="Button" Height="96" Margin="3,134,0,0" Style="{StaticResource ButtonStyle1}" VerticalAlignment="Top"/> 4 </Grid>

 修改如下:

1 <!--ContentPanel - place additional content here--> 2 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 3 <Button Content="Button" Height="96" Margin="3,134,0,0" Style="{StaticResource ButtonStyle1}" VerticalAlignment="Top"> 4 <Button.Background> 5 <ImageBrush ImageSource="test.jpg"/> 6 </Button.Background> 7 </Button> 8 </Grid>

  添加此图片到工程,

命名为test.jpg,F5运行,效果如下:

这样一个简单的自定义按钮就做好了,我们还可以通过VSM做成更为漂亮和满足用户需要的按钮,此例子只是给大家

一个思路,教大家如何制作自己需要的按钮。此文还有很多不足之处,希望大家能指出。

内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值