设为首页 收藏本站
查看: 1023|回复: 0

[经验分享] Windows Phone 7中,修改button样式并重用

[复制链接]
发表于 2018-6-24 11:13:47 | 显示全部楼层 |阅读模式
  在Wp7中按钮的默认效果是这样的:
  黑色主题普通/按下
http://silverlightchina.net/uploads/allimg/111128/2000144c8-0.gifhttp://silverlightchina.net/uploads/allimg/111128/200014N11-1.gif  白色主题普通/按下
http://silverlightchina.net/uploads/allimg/111128/200014JM-2.gifhttp://silverlightchina.net/uploads/allimg/111128/2000145014-3.gif  普通状态的背景色前景很容已通过修改Background、Foreground、BorderBrush等属性实现

  •   <ButtonContent="Button"Height="72"HorizontalAlignment="Left"Name="button1"VerticalAlignment="Top"Width="160"
  •   Background="Red"BorderBrush="Green"Foreground="Blue"
  •   Click="button1_Click"/>
  •   ;
http://silverlightchina.net/uploads/allimg/111128/200014LD-4.gif  但是按下状态的效果并未改变,仍然是默认效果
http://silverlightchina.net/uploads/allimg/111128/200014N11-1.gif  按下效果可以通过Blend修改按钮样式来实现
  默认的按钮样式是这样的

  •   <Stylex:Key="ButtonStyle1"TargetType="Button">
  •   <SetterProperty="Background"Value="Transparent"/>
  •   <SetterProperty="BorderBrush"Value="{StaticResource PhoneForegroundBrush}"/>
  •   <SetterProperty="Foreground"Value="{StaticResource PhoneForegroundBrush}"/>
  •   <SetterProperty="BorderThickness"Value="{StaticResource PhoneBorderThickness}"/>
  •   <SetterProperty="FontFamily"Value="{StaticResource PhoneFontFamilySemiBold}"/>
  •   <SetterProperty="FontSize"Value="{StaticResource PhoneFontSizeMediumLarge}"/>
  •   <SetterProperty="Padding"Value="10,3,10,5"/>
  •   <SetterProperty="Template">
  •   <Setter.Value>
  •   <ControlTemplateTargetType="Button">
  •   <GridBackground="Transparent">
  •   <VisualStateManager.VisualStateGroups>
  •   <VisualStateGroupx:Name="CommonStates">
  •   <VisualStatex:Name="Normal"/>
  •   <VisualStatex:Name="MouseOver"/>
  •   <VisualStatex:Name="Pressed">
  •   <Storyboard>
  •   <ObjectAnimationUsingKeyFramesStoryboard.TargetProperty="Foreground"Storyboard.TargetName=
      "ContentContainer">
  •   <DiscreteObjectKeyFrameKeyTime="0"Value="{StaticResource PhoneBackgroundBrush}"/>
  •   </ObjectAnimationUsingKeyFrames>
  •   <ObjectAnimationUsingKeyFramesStoryboard.TargetProperty="Background"Storyboard.TargetName="
      ButtonBackground">
  •   <DiscreteObjectKeyFrameKeyTime="0"Value="{StaticResource PhoneForegroundBrush}"/>
  •   </ObjectAnimationUsingKeyFrames>
  •   <ObjectAnimationUsingKeyFramesStoryboard.TargetProperty="BorderBrush"Storyboard.TargetName=
      "ButtonBackground">
  •   <DiscreteObjectKeyFrameKeyTime="0"Value="{StaticResource PhoneForegroundBrush}"/>
  •   </ObjectAnimationUsingKeyFrames>
  •   </Storyboard>
  •   </VisualState>
  •   <VisualStatex:Name="Disabled">
  •   <Storyboard>
  •   <ObjectAnimationUsingKeyFramesStoryboard.TargetProperty="Foreground"Storyboard.TargetName="
      ContentContainer">
  •   <DiscreteObjectKeyFrameKeyTime="0"Value="{StaticResource PhoneDisabledBrush}"/>
  •   </ObjectAnimationUsingKeyFrames>
  •   <ObjectAnimationUsingKeyFramesStoryboard.TargetProperty="BorderBrush"Storyboard.TargetName="
      ButtonBackground">
  •   <DiscreteObjectKeyFrameKeyTime="0"Value="{StaticResource PhoneDisabledBrush}"/>
  •   </ObjectAnimationUsingKeyFrames>
  •   <ObjectAnimationUsingKeyFramesStoryboard.TargetProperty="Background"Storyboard.TargetName="
      ButtonBackground">
  •   <DiscreteObjectKeyFrameKeyTime="0"Value="Transparent"/>
  •   </ObjectAnimationUsingKeyFrames>
  •   </Storyboard>
  •   </VisualState>
  •   </VisualStateGroup>
  •   </VisualStateManager.VisualStateGroups>
  •   <Borderx:Name="ButtonBackground"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="
      {TemplateBinding BorderThickness}"Background="{TemplateBinding Background}"CornerRadius="0"Margin="
      {StaticResource PhoneTouchTargetOverhang}">
  •   <ContentControlx:Name="ContentContainer"ContentTemplate="{TemplateBinding ContentTemplate}"
      Content="{TemplateBinding Content}"Foreground="{TemplateBinding Foreground}"HorizontalContentAlignment="
      {TemplateBinding HorizontalContentAlignment}"Padding="{TemplateBinding Padding}"VerticalContentAlignment="
      {TemplateBinding VerticalContentAlignment}"/>
  •   </Border>
  •   </Grid>
  •   </ControlTemplate>
  •   </Setter.Value>
  •   </Setter>
  •   </Style>
  将下<VisualState x:Name="Pressed">的Backgournd属性改成这样

  •   <DiscreteObjectKeyFrameKeyTime="0"Value="#600010"/>
  按下效果如下:
http://silverlightchina.net/uploads/allimg/111128/2000145359-6.gif  如果需要加入两个按钮,他们的按下效果不完全一样,例如一个按下背景是棕色,一个是紫色就需要写两个Style。
  仅仅这点差异,就需要写一个50行的style,这对代码维护显然是不利的。最终找到了一个解决方案。步骤如下
  1. 创建一个Button的派生类

  •   publicclass ButtonEx : Button
  •   {
  •   #region Fields

  •   publicstaticreadonly DependencyProperty PressedBackgroundProperty =
  •   DependencyProperty.Register("PressedBackground",
  •   typeof(Brush),
  •   typeof(ButtonEx),
  •   new PropertyMetadata(new SolidColorBrush(Colors.White), null));

  •   publicstaticreadonly DependencyProperty PressedForegroundProperty =
  •   DependencyProperty.Register("PressedForeground",
  •   typeof(Brush),
  •   typeof(ButtonEx),
  •   new PropertyMetadata(new SolidColorBrush(Colors.Black), null));

  •   publicstaticreadonly DependencyProperty PressedBorderBrushProperty =
  •   DependencyProperty.Register("PressedBorderBrush",
  •   typeof(Brush),
  •   typeof(ButtonEx),
  •   new PropertyMetadata(new SolidColorBrush(Colors.Black), null));

  •   publicstaticreadonly DependencyProperty InvisibleMarginProperty =
  •   DependencyProperty.Register("InvisibleMargin",
  •   typeof(Thickness),
  •   typeof(ButtonEx),
  •   new PropertyMetadata(new Thickness(12), null));

  •   #endregion

  •   #region Properties

  •   public Brush PressedBackground
  •   {
  •   set { SetValue(PressedBackgroundProperty, value); }
  •   get { return (Brush)GetValue(PressedBackgroundProperty); }
  •   }

  •   public Brush PressedForeground
  •   {
  •   set { SetValue(PressedForegroundProperty, value); }
  •   get { return (Brush)GetValue(PressedForegroundProperty); }
  •   }

  •   public Brush PressedBorderBrush
  •   {
  •   set { SetValue(PressedBorderBrushProperty, value); }
  •   get { return (Brush)GetValue(PressedBorderBrushProperty); }
  •   }

  •   public Thickness InvisibleMargin
  •   {
  •   set { SetValue(InvisibleMarginProperty, value); }
  •   get { return (Thickness)GetValue(InvisibleMarginProperty); }
  •   }
  •   #endregion
  •   }
  http://silverlightchina.net/html/zhuantixilie/winphone7/2011/1128/12144.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-529953-1-1.html 上篇帖子: Windows Phone 下拉菜单ListPicker 的实现(一) Silverlight for Windows Phone 7 Toolk 下篇帖子: windows下rsync部署安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表